2010-07-08 358 views
1

我做了一個應用程序,它必須在內存中存儲大量數據以提高計算性能。當QList變得太大時,應用程序崩潰

它是頂級對象爲QList<myObject*>的列表和對象的層次結構。加載數據時,會創建大量new myObject*實例並將其添加到列表中。內存消耗增加,當涉及〜1.9Gb時,程序崩潰。我的電腦(Vista)擁有4Gb RAM,並且我已經在其他電腦上使用較少的RAM(XP)進行測試,並且在同一時刻崩潰。我可以不使用超過1.9Gb的RAM嗎?

當一個較小的文件被加載和根據「Windows任務管理器」的內存使用情況是(比如說)1.2Gb我可以使用這些數據。但是如果我想加載另一個文件,即使在所有對象上調用delete並清除列表後,增長率都會從1.2Gb開始增長。爲什麼?
我試圖切換到QVector並致電squeeze(),但內存保持不變。我已經閱讀了關於QLists中動態內存分配的其他線程,但是在加載新文件之前是否真的無法重置內存?特別是因爲它在1.9Gb之後崩潰;按順序加載3個小文件,我在那裏。

非常感謝您的任何建議。

+0

你確定刪除對象嗎?檢查你的對象的析構函數。嘗試cppcheck http://sourceforge.net/projects/cppcheck/它可以檢測到一些內存泄漏。 – 2010-07-08 15:04:38

回答

4

如果您有32位Windows,那麼您的進程只能使用2 GB的內存。你只能用32位來解決更多的內存問題。如果您需要更多內存,也許應該更改爲64位Windows。

+0

爲了記錄,在64位Windows上,32位進程最多可以使用4 GB的內存。 – 2010-07-09 07:22:37