Как устроена куча (heap) в Go?

Middle+
2.2k просмотров
AFK Offer AI

Go использует собственный аллокатор памяти, основанный на TCMalloc. Куча разбита на арены (spans) разного размера — мелкие объекты (<32KB) выделяются из кешей P (mcache → mcentral → mheap), крупные — напрямую из mheap.

Каждый P имеет свой локальный кеш (mcache), что снижает contention. Объекты группируются по size classes (~70 классов), чтобы минимизировать фрагментацию.

Когда mcache пуст — он запрашивает span у mcentral, а тот у mheap. Если mheap не хватает — запрашивается память у ОС через mmap.

Следующий вопрос

Потокобезопасность map в Go?