【问题标题】:Huge initialization list, how to fix "fatal error C1060: compiler is out of heap space"巨大的初始化列表,如何修复“致命错误 C1060:编译器堆空间不足”
【发布时间】:2018-12-21 17:45:50
【问题描述】:

我正在尝试编译一个简单的 C++ 文件:

static const unsigned char content[] = 
        {
              // 29MB of data written as "0x1E, 0x83, 0x3E, 0x86, 0xC8, 0x80, ...". 10 values per line
        };

要编译的文件有将近 3M 行,大约是 200Mo

这是资源管理系统的输出,试图在我的二进制文件中嵌入一个 29Mo 资源文件(假设它是一个视频文件)以供以后在运行时使用。

当我编译时,VS2015 报告:

致命错误 C1060:编译器堆空间不足

是否有任何替代方案(使用静态 const unsigned char 以外的其他东西)?使文件有更少的行但每行有更多的字符? ...

注意:我尝试了 /Zm1000 选项但没有成功。

【问题讨论】:

  • 我假设你的意思是MB?为什么必须在源代码中?
  • 29Mo 是什么意思?请修正您的帖子。
  • 这与X/Y Problem 接壤。
  • 您可以尝试将二进制文件作为资源嵌入。从msdn.microsoft.com/en-us/library/windows/desktop/ms632583.aspx开始
  • 64 位编译器或许能够解决它。更改 VC++ 目录 > 可执行目录设置以选择 $(VC_ExecutablePath_x64_x86)、x64_x64 或 x64_ARM,具体取决于所需的平台目标。看着那草长得不是很有趣,你几乎肯定会改变那个实用程序来编写一个二进制文件。

标签: c++ visual-studio-2015 heap-memory


【解决方案1】:

根据MSDN documentation的主题:

消除不必要的全局变量,例如,通过分配 动态内存而不是声明一个大数组。

将当前文件拆分成更小的文件。

这两个你都应该修复。

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2017-03-10
    • 2011-06-04
    • 2021-03-19
    • 2016-04-27
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多