Большой начальный объем памяти для собственного приложения - PullRequest
3 голосов
/ 09 мая 2009

Я заметил, что нативное приложение C ++, над которым я работаю, имеет довольно большой объем памяти (20 МБ) даже до того, как оно входит в любой мой код.

(Я имею в виду меру «закрытых байтов» в Windows, которая, как я понимаю, является наиболее полезным показателем).

Я поместил точку останова в первую строку функции "main ()" и, конечно же, занимая ее, занимает 20 МБ.

Размер EXE-файла составляет всего пару мегабайт, поэтому он не учитывается.

Я также намеренно удалил все библиотеки DLL, чтобы доказать, что они не являются причиной. Как и ожидалось, он получает сообщение «Dll not found», но его размер по-прежнему составляет 20 МБ!

Итак, я подумал, что, возможно, причиной были статически инициализированные объекты.

Итак, я добавил точки останова как для "new", так и для "malloc". При первом обращении к ним (для первого статического инициализатора) память уже составляет 20 МБ.

У кого-нибудь есть идеи о том, как я могу диагностировать, что съедает эту память?

Поскольку это, кажется, память вне обычной парадигмы new / malloc, я изо всех сил пытаюсь понять, как отлаживать.

Приветствия

John

Ответы [ 3 ]

3 голосов
/ 09 мая 2009

Может быть, вы тянете много библиотек с вашим приложением. Большинство из них инициализируются до того, как выполнение будет передано вашей функции main (). Проверьте наличие нестандартных библиотек, с которыми вы ссылаетесь.

РЕДАКТИРОВАТЬ: очень простым решением было бы создать новый проект и просто связать библиотеки, которые вы используете, одну за другой, проверяя использование памяти каждый раз. Даже при том, что это уродливый подход, вы должны найти виновника таким образом.

Возможно, существует более элегантное решение, поэтому вы можете потратить некоторое время на поиск (бесплатного) решения для профилирования памяти.

3 голосов
/ 09 мая 2009

Вы можете скомпилировать свое приложение без отладочной информации и посмотреть, если это что-то изменит, способность отладки потребляет немного памяти.

2 голосов
/ 09 мая 2009

В моей системе простое приложение MFC и пустое приложение Delphi занимают примерно одинаковое количество личных байтов - около 400 КБ. Поэтому, если ваше приложение захватывает 20 МБ, это определенно что-то, что делает ваше приложение, а не какая-то операционная система. Вам необходимо опубликовать более подробную информацию о том, что делает ваше приложение, какие библиотеки оно использует и т. Д.

...