我正在尝试使用Linux中的qcc在QNX Momentics IDE(4.6)中构建一个项目。我无法通过以下错误继续构建过程:
virtual memory exhausted: Cannot allocate memory
/opt/qnx641/host/linux/x86/usr/lib/gcc/i386-pc-nto-qnx6.4.0/4.3.3/cc1plus error 1
该项目有一个超过1.3 MLOC的cpp文件。这是一个来自大型Matlab / SIMULINK仿真模型的自动生成代码,因此分割和征服并不容易。
很难理解它是否是qcc编译器的LOC限制或者是由于自动生成代码中的编程实践。
我想问一下:
virtual memory exhausted
问题的任何建议吗?答案 0 :(得分:1)
Q1:qcc是否有源文件大小限制? A1:qcc = gcc。更准确地说:qcc是一个调用gcc的轻量级包装器;所有真正的工作都是由gcc完成的。 GNU软件作为一般哲学,旨在不强加任意限制,我认为这对于gcc尤其如此。即使存在任意限制,也不会因为系统内存不足而触及这些限制。 随机链接: 预处理器限制:http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html 一些gcc限制基准测试:gcc module size limits
Q2:造成这种情况的不良编程习惯是什么? A2:例如,如您所示,将所有源代码转储到单个文件中。我说这个问题与你的案子无关,因为你已经声明你无法控制生成的代码。
问题3:任何修复虚拟内存的建议都会耗尽cc1plus的问题? A3:a)将更多内存放入您的主机(根据您拥有的数量以及您的操作系统是32位还是64位,可能会有所帮助,也可能没有帮助); b)增加交换空间(同样适用); c)如果a / b没有帮助,那么将操作系统升级到64位并再次尝试a / b。不幸的是,这个64位的建议几乎肯定不适用于QNX随6.4.1一起提供的gcc版本。也许甚至不是最新的。
作为一般建议,由于qcc使用的是gcc,我建议您使用主机的gcc(Linux附带的gcc)构建相同的代码。一旦有效,您可以开始寻找差异,这可能会归结为64位支持。