c++ - 减少 gcc 内存使用

标签 c++ multithreading qt gcc build

目前我必须在非常有限的硬件(只有 2GB RAM 的核心 i5)上构建一个相当大的项目。当使用 4 线程运行 make 时,由于每个线程占用高达 40% 的 RAM,gcc 崩溃了。 我用谷歌搜索了一下,发现了这个 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 容量“升级”到 4GB,现在它在构建项目时响应迅速。(实际上一根棍子断了,所以他们需要等待更换)。但我很好奇,在像 VPS 这样的资源有限的系统中,我们该如何处理呢? (除了减少构建线程?)
  • 我会在编译/链接时搜索占用大量 RAM 的文件。我不记得名字了,因为那不是我的模块。
  • 构建服务器有 2GB 的交换空间。

最佳答案

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

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

关于c++ - 减少 gcc 内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444790/

相关文章:

c++ - 使用自定义分配器调用对象构造函数/析构函数

c++ - 为什么 MSVC 编译这个模板函数失败?

c++ - C++中的运算符关键字

c# - 如何正确启动和取消任务。

c++ - SQLite+Qt : Select from table always returns single row

c++ - QT C++ - 类问题等到信号被处理并返回数据

c++ - 指针数组

Java - 多线程服务器仅适用于一个连接

c++ - C++ 中不同 vector 之间没有线程安全?

c++ - QSettings - 读取路径值的方式是什么?