2014-03-24 3 views
2

Привет, я новичок в управлении памятью, Я просто подумал о том, чтобы найти логику, чтобы найти свободное пространство кучи. Я чувствую, что, обнаружив разницу между «перерыв программы» и «указатель стека« мы можем получить, это правильно? если нет, пожалуйста, оправдайте и дайте мне знать правильную логику.Логика за поиском свободного места для кучи

+1

Попробуйте 'cat/proc/self/maps' или' cat/proc/1234/maps' для интересного процесса pid 1234. –

ответ

2

Макет памяти под Linux - это сложный зверь, и, на мой взгляд, вам обычно не нужно иметь доступную кучу: это одна из целей виртуальной памяти. Каждый процесс видит плоское большое пространство памяти.

Что касается вашего предложения, я не думаю, что это правильно, потому что, как описано здесь: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/, hep растет, начиная с конца сегмента BSS.

Вы можете легко получить размер кучи для процесса (22088 в данном примере) из терминала:

cat /proc/22088/maps | grep heap 
7f5082180000-7f5082ac7000 rw-p 00000000 00:00 0       [heap] 

С С пользовательского пространства кода, вы можете прочитать в этом файле, чтобы получить размер кучи текущий процесс.

+0

Привет, Мануэль, есть ли какой-либо системный вызов, который возвращает количество свободного пространства. написать api в c (Linux), чтобы найти доступное место кучи. – user3446120

+0

Такой системный вызов не существует. Вам нужно будет прочитать файл/proc/self/maps из вашего кода C, используя fopen и fread, чтобы получить эту информацию. –

+0

Hi Manuel, это показывает отображение памяти кучи (или) полной памяти кучи. Есть ли способ получить свободное пространство кучи (количество нераспределенного пространства кучи). – user3446120

Смежные вопросы