减少gcc内存使用

Tia*_*642 4 c++ qt multithreading gcc build

目前,我必须在非常有限的硬件(只有2GB RAM的i5内核)上构建一个相当大的项目。在运行带有4个线程的make时,由于每个线程吃掉40%的RAM,gcc崩溃了。我在谷歌上搜索了一下,发现了这个链接。少数人反馈它有效,但是不是我。

这是我做的。

/usr/bin/qmake-qt4 -r -spec linux-g++ $DEBUG_FLAGS -o Makefile "QMAKE_CXXFLAGS +=  --param ggc-min-expand=10 --param ggc-min-heapsize=8192"  /home/build-srv/LargeProject/largeProject.pro
Run Code Online (Sandbox Code Playgroud)

make输出确实具有标志:

g++ -c -pipe --param ggc-min-expand=10 --param ggc-min-heapsize=8192 -std=c++11 -std=c++11 -g -Wall -W -D_REENTRANT -fPIC -D_GLIBCXX_USE_CXX11_ABI=0 -DBASE_LIBRARY -DQT_DECLARATIVE_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++  -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtDeclarative...
Run Code Online (Sandbox Code Playgroud)

但是ram的用法仍然相同。唯一的方法是减少到单线程构建,这非常慢。

我做错什么了?有没有更好的解决方案呢?

更新

  • 是的,硬件部门将RAM容量“升级”到4GB,现在在构建项目时它可以响应。(实际上,一根棍子破了,所以他们需要等待更换)。但是我很好奇,在像VPS这样的有限资源系统中,我们该如何处理呢?(除了减少构建线程?)
  • 编译/链接时,我将搜索占用大量RAM的文件。我不记得这个名字,因为那不是我的模块。
  • 构建服务器具有2GB的交换空间。

Rei*_*ica 5

告诉您的雇主,他们为您提供的工作工具不足。这就是您正在执行的系统的一个玩笑,我认为它是由雇主提供的。毫无疑问,您需要更多的RAM。扩展RAM应该足够简单,没有i5主板最多只能容纳2G。

否则-是的,您将需要限制线程的数量,例如使用make -j2或什至make -j1.现代编译器都需要大量RAM并不是因为它们很浪费,而是因为它们一次将整个翻译单元的信息价值保存在内存中以提供全局优化。链接时代码生成将需要更多的内存,因为它可以保存有关整个应用程序的信息。

  • 我遇到了 gcc 使用超过 8GB RAM 的问题:(。我不知道该怎么办,有 2 个文件导致了这个问题。 (2认同)