2011-09-19 63 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

相关问题