Где находится динамически распределенная память? - PullRequest
4 голосов
/ 09 апреля 2010

Мы знаем, что операции malloc() и new динамически распределяют память из кучи, но где находится куча? Есть ли у каждого процесса своя собственная куча в пространстве имен для динамического размещения, или у ОС есть глобальная общая для всех процессов. Более того, я прочитал из учебника, что, как только происходит утечка памяти, недостающая память не может быть использована повторно до следующей перезагрузки нашего компьютера. Это тезис правильный? Если ответ «да», как мы можем это объяснить?

Спасибо за ваш ответ.

Привет.

Ответы [ 3 ]

8 голосов
/ 09 апреля 2010

Память выделяется из адресного пространства пользователя виртуальной памяти вашего процесса. И вся память освобождается ОС, когда процесс завершается, нет необходимости перезагружать компьютер.

1 голос
/ 09 апреля 2010

Обычно среда выполнения C использует различные API-интерфейсы ОС для выделения памяти, которая является частью его адресного пространства процесса. Внутри этой выделенной памяти он создаст кучу и выделит из нее кучу памяти через вызовы malloc или new .

Причиной этого является то, что часто API-интерфейсы ОС детализированы и требуют, чтобы вы выделяли память большими кусками (например, размером страницы), в то время как ваше приложение обычно хочет выделять небольшие объемы памяти одновременно.

0 голосов
/ 09 апреля 2010

Вы не упоминаете интересующую вас ОС. Это точно означает, что нет прямого ответа.

Попробуйте заглянуть в какую-нибудь книгу об ОС например Таненбаум в

...