Могу ли я дать карту памяти Malloc? - PullRequest
2 голосов
/ 12 июля 2019

Скажем, у меня есть большой блок отображенной памяти, который я закончил использовать. Он поступил из mmap анонимной памяти или MAP_PRIVATE. Я мог бы munmap это, затем снова набрать malloc mmap в следующий раз, когда я сделаю достаточно большое распределение.

Могу ли я вместо этого передать память malloc напрямую? Могу я сказать: «Эй, malloc, вот диапазон адресов, который я сопоставил. Пойди, используй его для кучи. Не стесняйся mprotect, mremap или даже munmap, как ты хочешь."?

Я использую glibc в Linux.

1 Ответ

0 голосов
/ 16 июля 2019

glibc malloc вызывает __morecore (указатель на функцию), чтобы получить больше памяти.Смотри <malloc.h>.Однако это не будет работать в целом, потому что реализация предполагает, что функция ведет себя как sbrk и возвращает память из одной, большей области памяти.На практике, с помощью glibc malloc, единственным реалистичным способом сделать память доступной для повторного использования malloc является вызов munmap.

. Другие реализации malloc позволяют передавать память (в некоторых случаях как внутренние интерфейсы).Например, malloc имеет функцию под названием __malloc_donate, которая должна делать то, что вы просите.

...