c++ - g++ 在编译时挂起

标签 c++ gcc

<分区>

我有一些代码可以用 g++ 编译。然后我使一些数组变大:

complex<double> densop[a][b][c] 

其中 a=b=400,g=500。当我用

编译时
g++ -L/.../gsl  -I/../gsl -O2 -lgsl -lgslcblas  -Wall -o sim1 sim1.cp 

编译器挂起 (5h+),与编译时相比没有额外的警告。

我以为可能是内存问题,但顶部显示 CPU 以 100% 的速度运行,而 %MEM 大约是一半。顺便说一句,我还全局声明了数组,这样它就不会在堆栈上很重。

另一件在编译正常和不正常的情况下不同的是,当我 #include 两个数据文件时,在第二种情况下更大(30 和 15 MB)。

gcc 版本 4.1.2,内存 30GB。尝试使用 -O0 和 -O2 标志。

提前致谢!

最佳答案

我当然见过 g++ 在将大型常量数据数组解析为 C++ 源代码时性能不佳的情况。改进这一点的一种方法是将大数据数组存储在输入文件中,并在程序启动时将它们加载到内存中。这将以在运行时进行少量启动处理为代价来解决编译性能问题。

请注意,即使您的常量数组编译并运行,它们仍然需要调用 complex<double>构造函数几百万次,因此从文件中读取可能不会花费太多。

关于c++ - g++ 在编译时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24899277/

相关文章:

c++ - std::malloc 是否在失败时返回 NULL 或 nullptr

当 .exe 在 Windows 7 32 位上运行时,使用 GCC 编译的 C 程序会导致 NVTDM 错误

linux - 如何判断库是否使用特定 GCC 版本编译

objective-c - Objective C 程序无法编译

c - 使用 pthread 和 arm-linux-gnueabihf-gcc 的段错误

c++ - libstdc++ 的 make_shared 布局是否在 gcc 4.x 和 gcc 6.x 之间发生了变化?

c++ - 从 clojure 调用 C++

python - 从 C++ 代码自动生成流程图

c++ - 将 Boost.Python 与 Visual Studio 8 集成

c++ - 使用boost::asio::overlapped_ptr的代码无法用作等效的winapi代码