我在Visual Studio 2008(C ++)中开发了一个Win32应用程序。它在32位或64位Windows 7中运行良好。但是,有时我需要分配相当大的内存缓冲区(应用程序处理大量数据),如果我在Windows 7 64位中执行它,它会失败,在32位运行正常。通过大内存缓冲区,我的意思是一个~250MB,另一个~150MB。我的PC上安装了8GB RAM,根据我的信息,64位操作系统为32位应用程序提供4GB可用性。我不需要接近这个限制,仍然malloc失败。 任何想法为什么以及我能做些什么呢? 提前谢谢。
答案 0 :(得分:1)
您正在Win32二进制文件中达到虚拟地址空间限制。限制might be 2 to 4 GB depending on OS and environment。由于分配碎片,Actualy限制较少。
您的选择是:
答案 1 :(得分:1)
150MB和250MB并不是特别庞大的分配。正如其他人所指出的那样,你遇到的问题很可能是地址空间碎片化(即有足够的自由空间,它不是一个整体)。
除了其他建议:
MEM_RESERVE
标志的VirtualAlloc来保留地址空间并稍后提交。答案 2 :(得分:-1)
我认为在win7-64下malloc中存在一个错误。我在三台机器上运行了与32位应用程序相同的测试:XP32,w7-32和win7-64。它在32位平台上运行正常,但未能在w7-64下分配110Mb块。我已经对驱动器进行了碎片化,并从干净的重新启动再次尝试了相同的结果。
ķ