2011-09-19 33 views
1

我有一個C++圖形應用程序,在模型上執行繁重的計算。有一個leak or two,我已經追溯到CG和/或我的ATI顯卡(我100%確定!!)。我使用的機器有16 GB內存,而當我使用4.49 GB RAM(系統總使用率,應用程序僅使用〜1.9GB)時,vector.resize()開始返回0個新元素,並且無法調整數組的大小。爲什麼這麼快?當您的應用程序開始內存不足時,您會做什麼?

回答

3

(視窗假定)

一個32位Windows應用程序被限制到約2.0 GB的用戶模式內存(或3.0 GB如果某些引導時間參數設置)。當你的應用程序使用了1.9 GB的內存時,井就乾涸了。

參考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx#memory_limits

+0

好的!在VS 2010中[Project Properties/Config/Linker/System:Enable Large Addresses = YES](http://msdn.microsoft.com/zh-cn/library/wz223b1z(VS.80).aspx) – bobobobo

+0

這只是它。您還必須以這種方式啓動Windows引導,以便爲用戶空間保留3GB,而不是通常的2GB。執行此操作的方法因Windows的特定版本而異。 –

+0

請參閱:http://msdn.microsoft.com/en-us/library/windows/desktop/bb613473(v=vs.85).aspx –

1

我改變了構建配置到x64和應用工作正常

+0

難道你不知道,32位程序只能處理2GB的內存? –

+0

實際上假設它是2^32 = 4GB! – bobobobo

0

拋出一個異常! 當然,最好找到並蓋章泄漏,但當內存不足時:例外!要做得更好,重啓你自己的應用程序作爲迴應。

+0

這需要用'.size()'== size_you_wanted檢查包裹EVERY'.resize()',並且每個'malloc()'和'new'都必須檢查是否返回NULL。 – bobobobo

相關問題