Как malloc выделяет память менее 4 КБ?

Если malloc вызывает функцию VirtualAlloc () для выделения памяти (которая выделяет минимум 4Kb), как malloc выделяет 4 байта для int?

3

Решение

malloc запрашивает память у ОС в кратных размер страницы (очевидно, так как размер страницы по определению является квантом выделенной памяти) и передает его вам небольшими порциями.

Это не отличается от того, что делают все распределители памяти — фактически специализированные распределители памяти (например, Boost.Pool) которые используют malloc негласно сделайте это еще раз: они выделяют больший кусок памяти через malloc и раздать его вам по кусочкам.

7

Другие решения

Приложение, над которым я работаю, внутренне использует реализацию malloc.c от Дуга Ли (ftp://g.oswego.edu/pub/misc/malloc.c), он широко используется на многих платформах.

Эта реализация забирает память из системы, в случае Windows в кусках по 64 КБ, зарезервированных и зафиксированных с использованием VirtualAlloc. Затем он использует различные алгоритмы и структуры для максимально эффективного использования этой памяти.

Я протестировал распределение 2 байтов, и из отладчика я вижу, что он сначала дополняет его до 4 байтов и помещает его в SmallBins — это способ обработки небольших выделений памяти. В итоге я вижу, что реальное использование памяти в этом распределении составляет 16 байт. Но это, вероятно, зависит от платформы.

1

По вопросам рекламы [email protected]