我正在尝试编译一个大约5.7 MB的C++文件.我正在64位Linux系统上构建64位Linux可执行文件.遗憾的是,g ++ 4.7.2不合作:
g++: internal compiler error: Killed (program cc1plus)
Run Code Online (Sandbox Code Playgroud)
Observing with top表示在此之前该进程达到大约2.2 gig的内存.我试过设置--param gcc-min-expand=0也玩了--param gcc-min-heapsize但是没有解决问题.禁用优化-O0也没有帮助.
我也尝试用clang编译,但结果是相似的.它在超过2演出的记忆之后也被分割.我没有尝试任何额外的选项,因为我不太熟悉它.
有问题的源文件包含几个映射的C++ 11样式初始化.
typedef std::map<std::string, int> StringToIntMap;
StringToIntMap someData = {{"SOMESTRING", 1}, ..};
Run Code Online (Sandbox Code Playgroud)
我想要的是最好用gcc编译文件,虽然如果clang可以工作,我也可以忍受它.从知道内部人员的人那里了解幕后发生的事情也是有帮助的.如果我有一个300 000个元素的映射,其中字符串大约5个字节长,并且int每个元素对应一个,那就是几兆字节的数据,我无法想象初始化器如何将它吹到需要千兆字节到编译.
并抢占评论,我不应该有这么大的源文件.我知道我可以在运行时从数据文件中读取数据,这就是程序现在所做的,但我的用例是程序的执行时间是最重要的因素.