У меня есть два связанных вопроса, поэтому я задаю их в этой единственной ветке.
Q1) Как я могу подтвердить, очищает ли моя ОС несвободную память (выделенную с помощью malloc) автоматически при завершении программы? Я использую 32-разрядную версию Ubuntu 11.04 с gcc-4.5.2
Согласно странице руководства Стивена Саммита, здесь, «Освобождение неиспользуемой памяти (malloc'ed) - хорошая идея , но это не обязательно. Когда ваша программа завершает работу, любая память, которая была выделена, но не освобождена, должна быть автоматически освобождена. Если ваш компьютер каким-то образом `` потерял '' память только потому, что ваша программа забыла освободить ее, это будет означать проблема или недостаток в вашей операционной системе. "
Q2) Предположим, foo.c блокирует B-байтовую память. Позже foo.c освобождает эти B-байтовые ячейки памяти и возвращает их в ОС. Теперь мой вопрос: могут ли эти ОПРЕДЕЛЕННЫЕ B-байты ячеек памяти перераспределить для foo.c (ОС) в текущем экземпляре ИЛИ эти B-байты не могут быть выделены для foo .c, пока его текущий экземпляр не прекратит работу?
ИЗМЕНИТЬ: я бы рекомендовал всем, кто читает мой вопрос, прочитать ответ на аналогичный вопрос здесь и здесь. Оба ответа подробно объясняют взаимодействие и работу malloc () и free () без использования очень эзотерических терминов. Чтобы понять РАЗНИЦУ между инструментами управления памятью, используемыми ядром (например, brk (), mmap ()), и инструментами, используемыми C-компилятором (например, malloc (), free ()), это НЕОБХОДИМО ПРОЧИТАТЬ.