[英]why does the memory my program uses keep growing as it runs?
從第一次搜索開始,我發現一些消息來源說我可能有內存泄漏。 但是,當我詳細搜索什么是內存泄漏時,它說我在使用“ new”而不使用“ delete”時發生了。但是我在整個程序中甚至都沒有使用過new,所以我以為這意味着問題是另外一回事。 我沒有任何增長的陣列或任何其他我能想到的會導致這種情況的信號。 在程序初始化之后,我想那之后它不會改變,但是我會成長,並且我很快就會添加。
該程序非常大,所以我不認為將其全部粘貼在此處是個好主意。 也許只是一些可能導致這種情況的一般想法,可以幫助我知道在哪里看。
只是一個想法,該應用程序是2D側面滾動器,就像超級馬里奧世界
由於您使用SDL
,因此我懷疑分配來自SDL
,例如IMG_Load
或SDL_LoadWave
。 根據經驗,當API給您一個指針時,這意味着您還必須要求該API釋放它。
以SDL_Surface
為例,調用IMG_Load
(或分配圖像的任何其他API函數)將分配內存。 您需要在每個SDL_Surface
上手動調用SDL_FreeSurface
才能釋放內存。
SDL
所有其他資源都是一樣的。
我看到您將SDL作為標簽之一,因此我假設此2D游戲正在使用該庫。
如果是這種情況,那么使用庫功能之一很有可能會動態分配內存。
如果您是為Mac OS X開發的,則可以使用Xcode附帶的免費工具,稱為Instruments; 它有一個用於識別內存泄漏的模板。
如果您是為Windows開發的,則可以使用許多工具,其中一個是Intel的Parallel Studio,它內置了一個內存分析工具,盡管它不是免費的。
觀察內存使用情況的另一種方法是使用跨平台的Google C ++測試框架。 該框架將允許您測試部分代碼,以便您可以看到對SDL的調用導致內存快速增長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.