Утечка памяти ARM/Linux: может ли пользовательская программа сохранить память после завершения?

У меня есть где-то утечка памяти, но, похоже, она не связана с моей программой. Я делаю это смелое заявление, основываясь на том факте, что после того, как моя программа завершится из-за ошибки сегментации, выхода или прерывания, память не восстанавливается. Если бы виновата была моя программа, я бы предположил, что MMU восстановит все, но, похоже, это не так.

Мой вопрос:

В небольшой системе Linux (64 МБ ОЗУ), в которой работает программа, использующая только стековую память и несколько вызовов malloc(), по каким причинам я могу также увидеть, что память исчерпана и не работает после завершения моей программы?

Связанный с этим вопрос здесь:


Все это началось, когда рассматриваемый код направлял свой stdout, stderr в файл. Через несколько часов он прервался из-за «Ошибки сегментации». Быстрый (наивный?) взгляд на /proc/meminfo показал, что доступной памяти не так много, поэтому я предположил, что что-то протекает.


person Jamie    schedule 09.10.2009    source источник
comment
Не могли бы вы объяснить, что вы видите, что заставляет вас полагать, что программа сохраняет память после завершения. Я предполагаю, что вы неверно истолковываете какую-то другую ситуацию.   -  person R Samuel Klatchko    schedule 09.10.2009
comment
Это тоже мое предположение. Недавно мне указали на то, что я смотрю на память, кэшируемую блочным уровнем.   -  person Jamie    schedule 09.10.2009


Ответы (1)


Похоже, у меня нет утечки памяти (см. здесь) но это наводит меня на некоторые новые вопросы...


Оказывается, запись на блочные устройства может использовать довольно много физической памяти; в моей системе было всего 64 мегабайта, поэтому запись сотен мегабайт на USB-накопитель немного увеличивала кэшированные, активные и неактивные пулы памяти.

Эти пулы памяти немедленно освобождаются в пул свободной памяти при отключении устройства.

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

person Jamie    schedule 09.10.2009