Действительно освобождает (), не отображают память процесса?

В следующий раз я должен обратить внимание туда, где я устанавливаю Ubuntu. Если это находится на внешние медиа, как в этом случае, я или должно оставить диск включенным, хотя я не полагаю, что можно с готовностью загрузить ОС через USB или установить Ubuntu локально.

8
01.11.2012, 01:32
1 ответ

C-библиотечная-функция free() но не имеет к, может возвратить память ядру.

Некоторые реализации malloc() переместите границу между "кучей" и в других отношениях неиспользованным адресным пространством ("системное повреждение") через sbrk() системный вызов, затем скупо выдайте мелкие кусочки тех больших выделений. Не получая каждую меньшую освобожденную часть, free() не может действительно возвратить память ОС.

Та же самая причина относится malloc() реализации, которые не используют sbrk(2), но, возможно, используйте mmap("/dev/zero") или что-то.. Я не могу найти ссылку, но я, кажется, помню что один или другой из используемого BSD's mmap() тот способ получить страницы памяти. Тем не менее, free() не может возвратить страницу операционной системе, если каждое подвыделение не освобождено программой.

Некоторые malloc() реализации действительно возвращают память системе: ChorusOS(?), по-видимому, сделал. Не ясно, переместило ли это системное повреждение, или munmap()'ed страницы.

Вот статья о средстве выделения памяти, которое улучшает производительность "агрессивным отказом от свободных страниц к диспетчеру виртуальной памяти". Показ слайдов для разговора о средстве выделения.

5
27.01.2020, 20:12
  • 1
    , который я понимаю свободный () не возвращает памяти ОС. Но действительно освобождает (), не отображают память, или память остается быть отображенной glibc средством выделения памяти? –  michelle 31.10.2012, 21:43
  • 2
    , "свободный (), не может возвратить страницу операционной системе, если каждое подвыделение не освобождено программой". Я действительно не понимаю это. Вы могли объяснить 'подвыделение'? –  michelle 31.10.2012, 21:45
  • 3
    @michelle: предположите размер страницы 4 192 байтов. Программа называет malloc (4186) и затем malloc (8). Программа выделила всю страницу. Программа называет свободным () на 4 186-байтовом выделении. свободный () не может не отобразить страницу, потому что 8 выделений байта не были свободны () 'редактор –  Bruce Ediger 31.10.2012, 22:58
  • 4
    Это имеет смысл. Спасибо Bruce. Таким образом, мое предположение - когда страница все еще отображается, все данные в нем все еще учтены valgrind измерением, хотя некоторые уже освобождены. Корректный? –  michelle 01.11.2012, 14:24

Теги

Похожие вопросы