Я понимаю, что в Linux mm_struct
описывает структуру памяти процесса. Я также понимаю, что start_brk
и brk
обозначают начало и конец секции кучи процесса соответственно.Где находится куча?
Теперь это моя проблема: у меня есть процесс, для которого я написал исходный код, который выделяет 5,25 ГБ памяти кучи, используя malloc
. Однако, когда я просматриваю процесс mm_sruct
с использованием модуля ядра, я нахожу, что значение равно 135168. И это отличается от ожидаемого: я ожидал, что brk - start_brk
будет равен чуть выше 5,25 ГБ.
Итак, что здесь происходит?
Спасибо.
@hcs избили меня. Я предлагаю прочитать http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/, в котором говорится: «В Linux, если вы запрашиваете большой блок памяти через malloc(), библиотека C создаст такое анонимное сопоставление вместо использования кучной памяти. «Большой» означает больше, чем байты MMAP_THRESHOLD, по умолчанию 128 kB и настраивается через mallopt() ». Вся статья стоит прочитать. – RJinman