巨大的初始化列表,如何修复“致命错误C1060:编译器堆空间不足”

问题描述 投票:0回答:2

我正在尝试编译一个简单的 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:编译器堆空间不足

有没有其他选择(使用 static const unsigned char 之外的东西)?使文件的行数减少但每行字符数增加? ...

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

c++ visual-studio-2015 heap-memory
2个回答
2
投票

根据有关该主题的 MSDN 文档

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

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

这两个问题你都应该修复。


0
投票

五年后,当我使用 Visual Studio 2017 使用 CMake 构建 Windows 32 位目标时,我遇到了同样的问题,试图以相同的方式将大型资源(在我的例子中为 24MB)嵌入到 CPP 文件中。指定

cmake -G "Visual Studio 15 2017"
时的默认工具集实际上是 x86 主机二进制文件,它确实会失败并出现错误 C1060。然而,使用
cmake -G "Visual Studio 15 2017" -T "host=x64"
,它使用 x64 主机二进制文件来构建(仍然适用于 32 位 x86 目标)并成功完成。

© www.soinside.com 2019 - 2024. All rights reserved.