在Windows 7 64位中开发32位C ++应用程序

时间:2012-02-07 08:35:58

标签: c++ windows 64-bit

我在Visual Studio 2008(C ++)中开发了一个Win32应用程序。它在32位或64位Windows 7中运行良好。但是,有时我需要分配相当大的内存缓冲区(应用程序处理大量数据),如果我在Windows 7 64位中执行它,它会失败,在32位运行正常。通过大内存缓冲区,我的意思是一个~250MB,另一个~150MB。我的PC上安装了8GB RAM,根据我的信息,64位操作系统为32位应用程序提供4GB可用性。我不需要接近这个限制,仍然malloc失败。 任何想法为什么以及我能做些什么呢? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您正在Win32二进制文件中达到虚拟地址空间限制。限制might be 2 to 4 GB depending on OS and environment。由于分配碎片,Actualy限制较少。

您的选择是:

答案 1 :(得分:1)

150MB和250MB并不是特别庞大的分配。正如其他人所指出的那样,你遇到的问题很可能是地址空间碎片化(即有足够的自由空间,它不是一个整体)。

除了其他建议:

  • 程序启动后立即分配内存。地址空间不太可能被分段。如果在程序的生命周期中分配这么多内存是不明智的,请使用带有MEM_RESERVE标志的VirtualAlloc来保留地址空间并稍后提交。
  • 如果地址空间在进程启动后立即碎片化,则可能是由于DLL在无用的位置加载而导致的。您可以使用VMMap查看地址空间中发生的情况。如果属于你的DLL正在分割地址空间,你可以将它们重新绑定。

答案 2 :(得分:-1)

我认为在win7-64下malloc中存在一个错误。我在三台机器上运行了与32位应用程序相同的测试:XP32,w7-32和win7-64。它在32位平台上运行正常,但未能在w7-64下分配110Mb块。我已经对驱动器进行了碎片化,并从干净的重新启动再次尝试了相同的结果。

ķ