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

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

Мой вопрос:

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

Смежный вопрос здесь :


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

1 Ответ

0 голосов
/ 09 октября 2009

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


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

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

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

...