cc1plus:虚拟内存耗尽

woj*_*zek 5 c++ qnx momentics

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

该项目有一个超过1.3 MLOC的cpp文件.这是一个来自大型Matlab/SIMULINK仿真模型的自动生成代码,因此分割和征服并不容易.

如果它是qcc编译器的LOC限制或者由于自动生成代码中的编程实践,很难理解.

我想问一下:

  • qcc是否有任何源文件大小限制?
  • 导致这种情况的不良编程实践是什么?
  • 有什么建议来解决virtual memory exhaustedcc1plus的问题吗?

mav*_*ick 1

Q1:qcc 有源文件大小限制吗?A1:qcc = gcc。更准确地说:qcc是一个调用gcc的轻量级包装器;所有真正的工作都是由 gcc 完成的。作为一般哲学,GNU 软件的设计目的是不施加任意限制,我认为对于 gcc 来说尤其如此。即使存在任意限制,您也不会达到这些限制,因为您的系统内存不足。随机链接:预处理器限制:http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html 一些 gcc 限制 基准测试:gcc 模块大小限制

Q2:导致这种情况的不良编程习惯是什么?A2:例如,将所有源代码转储到一个文件中,正如您所演示的那样。我想说这个问题与您的情况无关,因为您已经说过您无法控制生成的代码。

Q3:有什么建议可以解决cc1plus虚拟内存耗尽的问题吗?A3:a)在您的主机中放入更多内存(可能有帮助,也可能没有帮助,具体取决于您有多少内存以及您的操作系统是 32 位还是 64 位);b)增加交换空间(同样适用);c) 如果 a/b 不起作用,请将操作系统升级到 64 位,然后再次尝试 a/b。不幸的是,这个 64 位建议几乎肯定不适用于 QNX 6.4.1 附带的 gcc 版本。也许甚至还没有到最新的。

作为一般建议,由于 qcc 使用 gcc,我建议您使用主机的 gcc(Linux 附带的 gcc)构建相同的代码。一旦成功,您可能会开始寻找差异,这可能归结为 64 位支持。