Увеличение использования памяти без утечки? - PullRequest
1 голос
/ 18 июня 2011

У меня есть программа, которая сообщает, что CRTDBG не имеет утечек, но, по словам Windows Task Manager, со временем занимает больше памяти. Еще хуже то, что при достаточном времени произойдет сбой с кодом выхода -1.

Это программа, которая станет игровым движком, сейчас я тестирую функции, которые разгрузят уровень, заставляя его быстро загружать и выгружать уровни. Похоже, это работает, в противном случае объекты с «последнего» уровня столкнутся с текущими. Память не увеличивается, когда я запускаю программу «нормально» и загружаю один уровень без выгрузки до выхода.

Можно отметить, что загрузка уровня включает чтение с жесткого диска и открытие файла. Также может быть важно знать, что я использую физическую библиотеку Бурундука, Lua и OpenGL.

Самое сложное в том, что CRTDBG не создает дамп и возвращает 0 в конце main ().

РЕДАКТИРОВАТЬ: Кроме того, с помощью Visual Studio 2008.

Ответы [ 3 ]

3 голосов
/ 19 июня 2011

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

Возможно, вы держите какой-то список объектов, которые вы забыли освободить / удалить между загрузками каждого уровня?

0 голосов
/ 19 июня 2011

Сборщик мусора Lua собирает, когда захочет.Если вы явно не приказываете Lua сделать коллекцию, то память может накапливаться там без фактического использования.

0 голосов
/ 19 июня 2011

Возможно, вы наблюдаете за эффектами «умного» распределителя, который запрашивает у ОС большие куски памяти и выделяет ее.Вы можете проверить, заменив глобальные operator new и operator delete.Если они сообщают вам, что вся выделенная память также освобождена, и, тем не менее, потребление памяти процессом увеличивается или остается там, то это (скорее всего) распределитель.

...