Основная идея заключается в том, что при запуске вашей программы куча очень мала, но не обязательно равна нулю.Если вы выделяете (malloc) только небольшой объем памяти, библиотека может обработать ее в пределах небольшого пространства, которое она имеет при загрузке.Однако, когда malloc не хватает этого пространства, он должен сделать системный вызов, чтобы получить больше памяти.
Этот системный вызов часто является sbrk (), который перемещает верхнюю часть области памяти кучи на определенную величину.количество.Обычно процедура библиотеки malloc увеличивает кучу на больше , чем требуется для текущего выделения, в надежде на то, что будущие выделения могут быть выполнены без выполнения системного вызова.
Otherреализации malloc используют взамен mmap () - это позволяет программе создавать разреженное отображение виртуальной памяти.Однако реализации malloc на основе mmap () делают то же самое, что и реализации на основе sbrk (): каждый системный вызов резервирует больше памяти, чем необходимо для текущего вызова.
Один из способов посмотреть на эточтобы отследить программу, которая использует malloc: вы увидите, что для N вызовов malloc вы увидите M системных вызовов (где M намного меньше N).