0xb*_*00d 10 c++ memory windows memory-management visual-studio
我遇到了一个奇怪的问题,我的过程不能分配比看起来略低于1 GiB的东西.当我的软件发出bad_alloc异常时,Windows任务管理器"内存使用情况"列显示接近1 GiB的值.是的,我检查传递给内存分配的值是否合理.(不存在会导致此失败的竞争条件/腐败).是的,我需要所有这些记忆而没有办法解决它.(它是图像的缓冲区,无法进一步压缩)
我不打算一次性分配整个1 GiB内存,有几个分配大约300 MiB.这会引起问题吗?(我会试着看看更小的分配是否更好).是否有一些编译器开关或我必须设置的其他东西才能超过1 GiB?我见过其他人抱怨2 GiB限制,这对我来说没问题.我只需要多一点:).我正在使用VS 2005和SP1,我在32位XP上运行它,它是用C++编写的.
jal*_*alf 11
上的32位操作系统,处理具有4GB的地址空间在总.
在Windows上,其中一半是禁止的,因此您的进程有2GB.
这是2GB的连续内存.但它变得支离破碎.您的可执行文件加载到一个地址,每个DLL加载到另一个地址,然后是堆栈,堆分配等等.因此,虽然您的进程可能有足够的空闲地址空间,但是没有足够大的连续块来满足您的内存请求.因此,进行较小的分配可能会解决它.
如果你的应用程序是使用LARGEADDRESSAWARE标志编译的,那么它将允许使用Windows剩余的2GB空间.(其价值取决于您的平台和环境.
所以,如果您的应用程序可以处理它(它基本上是一个功能标志),设置标志总是一个好主意.它告诉Windows 我们可以处理更多内存,所以如果Windows也可以,它应该继续,并给我们这么大尽可能地址空间),但你可能不能依赖它有效果.除非您使用的是64位操作系统,否则不太可能为您买单.(/ 3GB启动开关是必需的,并且已知会导致驱动程序出现问题,尤其是视频驱动程序)