gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:39:04 25 4
gpt4 key购买 nike

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

最佳答案

150MB 和 250MB 并不是特别大的分配。正如其他人所指出的,您遇到的问题很可能是地址空间碎片(即有足够的可用空间,但不是全部都在一 block )。

除了其他建议:

  • 程序一启动就分配内存。地址空间将不太可能被碎片化。如果在程序的生命周期内分配这么多内存是不明智的,请使用 VirtualAlloc使用 MEM_RESERVE 标志保留地址空间并稍后提交。
  • 如果地址空间在进程启动后立即出现碎片,则可能是由于 DLL 在无用位置加载所致。您可以使用 VMMap查看地址空间中发生了什么。如果属于您的 DLL 正在碎片化地址空间,您可以对其进行 rebase 。

关于c++ - 在 Windows 7 64 位中开发 32 位 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com