【问题标题】:Increasing (nonstack) memory used by a C/C++ program增加 C/C++ 程序使用的(非堆栈)内存
【发布时间】:2013-07-03 19:15:29
【问题描述】:

我在具有 12 GB RAM 的 Windows 操作系统上运行大量内存密集型作业。根据我的计算,4 GB 的内存应该足以运行该程序。我正在使用 CodeBlocks 运行我使用动态内存分配编写的程序(我有两个 C 和 C++ 版本的程序,分别为 malloc/freenew/delete)。

当我打开任务管理器时,我看到该程序似乎只使用了大约 2 GB 的 RAM,即使我有更多可用内存,并且页面文件大小当前设置为 30 GB。有什么办法可以让 CodeBlocks 使用更多内存?我还使用了 DEV-C++,并且在 C++ 代码中遇到了同样的 bad_alloc 错误。

有什么想法吗?提前致谢。 哦,我使用的是 64 位 Windows 7。

【问题讨论】:

  • 我假设您使用的是 32 位版本的 Windows,在这种情况下答案是否定的。如果您使用的是 64 位版本的 Windows,您可以构建一个 64 位二进制文​​件来提供对所有系统内存的访问。
  • 我使用的是 64 位 windows os 7。
  • 听起来你正在为 32 位目标编译。你到底使用的是哪个编译器?
  • 您需要创建一个 64 位程序以利用 64 位操作系统上进程可用的大虚拟内存地址空间。
  • 默认情况下,32 位进程使用 2gb 的用户可访问地址空间创建,有一种方法可以将默认值增加到 3gb。 64 位应用程序不应该有这个限制 - 正如有人已经提到的那样,您很可能正在构建一个 32 位可执行文件。

标签: c++ c windows memory 32bit-64bit


【解决方案1】:

查看此页面,了解基于体系结构(x86、64 位)和 Windows 版本的内存限制。提到了一些解决方法:
https://docs.microsoft.com/en-us/windows/win32/memory/memory-limits-for-windows-releases#memory_limits

首先,您必须确保构建的是 64 位可执行文件,而不是 32 位。
如果使用 g++,请确保使用选项 -m64


至于 MSDN 页面中提到的大地址感知,它应该在 64 位 Windows 系统上默认处于活动状态。 尽管如此,Visual C++ 链接器仍然可以选择明确地请求它:/LARGEADDRESSAWARE

现在,如果您不使用 Visual C++ 链接器,如果您想为您的可执行文件激活大地址感知,您似乎总是可以将此作为额外步骤:

editbin /LARGEADDRESSAWARE your_executable

(editbin 是一个 M$ Visual Studio 工具)

【讨论】:

  • dev-c++/code-block 的解决方法可能是使用 ms 的 ld.exe。 forums.codeblocks.org/index.php?topic=12183.45
  • 哦,对不起,我读得太快了。看起来您可以使用 editbin (msdn.microsoft.com/en-us/library/xd3shwhf%28v=vs.80%29.aspx) 为编译后的二进制文件提供更多内存。
  • 看起来我必须下载editbin.exe - 这看起来像是一个下载它的好地方吗? originaldll.com/file/editbin.exe/39047.html
  • 也许你可以下载Visual Studio C++ Express Edition并安装它(不一定在同一台机器上)。它是免费的,总能派上用场,它应该包含editbin.exe
  • @YohanDanvin 我在机器上安装了visual c++ express 2010。我从未使用过它,也不知道如何编译程序并使用它运行。谷歌搜索已经提出了一些解决方案。我怀疑我会在这里待一段时间来解决这个问题——除非你有推荐的资源?非常感谢所有的帮助。来自 linux 的新 windows 用户。
【解决方案2】:

感谢迄今为止的所有帮助。有一个简单的解决方法。我安装了 mingw 64 位编译器,将代码块指向该编译器,一切都像魅力一样工作。耶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2010-10-27
    • 2011-03-13
    • 2011-07-16
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多