减少gcc内存使用量

时间:2017-04-17 03:39:28

标签: c++ multithreading qt gcc build

目前,我必须在非常有限的硬件上构建一个相当大的项目(核心i5只有2GB RAM)。当运行make 4线程gcc崩溃时,由于每个线程占用高达40%的RAM。 我用Google搜索了一下,发现了link。有些人反馈它有效。但是,不是我。

我是这样做的。

/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

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...

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

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

更新

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

1 个答案:

答案 0 :(得分:5)

告诉您的雇主他们为您的工作提供的工具不足。对于你正在做的事情,这是一个系统的笑话,我认为它是由雇主提供的。你需要更多的RAM,毫无疑问。它应该足够简单以扩展RAM,没有i5主板只能将2G作为最大值。

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