Sobes.tech
Back to questions
Middle+
3

Какие кучи знаешь кроме основной (SOH)? Расскажи про Large Object Heap и Pinned Object Heap.

Companies where asked
Core outstaff

Answer from AI

sobes.tech AI

В .NET помимо основной кучи (Small Object Heap, SOH) существуют:

  • Large Object Heap (LOH) — используется для объектов размером более 85 000 байт. Такие объекты выделяются отдельно, чтобы избежать фрагментации SOH. LOH не компактен по умолчанию, что может приводить к фрагментации памяти.

  • Pinned Object Heap (POH) — введён в более новых версиях .NET для хранения объектов, которые нельзя перемещать сборщиком мусора (например, при работе с небезопасным кодом или interop). POH позволяет уменьшить фрагментацию и повысить производительность при работе с закреплёнными объектами.

Пример:

byte[] largeArray = new byte[100_000]; // попадёт в LOH
fixed (byte* p = largeArray) {
    // pinned pointer, объект закреплён в POH
}