C++ g++;编译时挂起

C++ g++;编译时挂起,c++,gcc,C++,Gcc,我有一些代码可以用g++很好地编译。然后我将一些数组放大: complex<double> densop[a][b][c] 编译器挂起(5h+)时,不会比编译时发出额外警告 我原以为可能是内存问题,但top显示CPU运行速度为100%,而%MEM大约为一半。顺便说一句,我还全局声明了数组,这样它在堆栈上就不会很重 编译正常与否的情况下的另一个不同之处是,当I#包含两个数据文件时,第二种情况下的数据文件更大(30和15 MB) gcc版本4.1.2,内存30GB。尝试使用-O0和-

我有一些代码可以用g++很好地编译。然后我将一些数组放大:

complex<double> densop[a][b][c] 
编译器挂起(5h+)时,不会比编译时发出额外警告

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

编译正常与否的情况下的另一个不同之处是,当I#包含两个数据文件时,第二种情况下的数据文件更大(30和15 MB)

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


提前谢谢你

> P>我已经看到了当将大型常量数据数组解析为C++源代码时,G++的性能较差的情况。一种改进方法是将大数据数组存储在输入文件中,并在程序启动时将其加载到内存中。这将以运行时少量启动处理为代价解决编译性能问题


注意,即使你的常数数组编译和运行,它们仍然需要调用复杂< /COD>构造函数几百万次,所以从文件中读取可能不会花费太多。

< P>我已经看到了当将大型固定数据数组解析为C++源代码时,G++的性能较差的情况。一种改进方法是将大数据数组存储在输入文件中,并在程序启动时将其加载到内存中。这将以运行时少量启动处理为代价解决编译性能问题



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

围绕变量声明显示更多代码。例如,它是在函数中声明的,还是在文件范围内声明的,还是作为静态声明的?请注意,写入的数组是
8000000
元素的
double
,其总大小为
640MB
。对于您列出的规格,这不应该是一个问题,但我想我应该包括这个细节,以防它突然出现在任何人身上。@Cyber元素类型是
复杂的
,实际上是两个双倍的大小。所以总内存使用量是1280MB。是的,该内存可能应该动态分配,否则您将有一个地狱般的可执行大小…不幸的是,机器是共享的,我没有权限更新g++并且时间有点短!显示有关变量声明的更多代码。例如,它是在函数中声明的,还是在文件范围内声明的,还是作为静态声明的?请注意,写入的数组是
8000000
元素的
double
,其总大小为
640MB
。对于您列出的规格,这不应该是一个问题,但我想我应该包括这个细节,以防它突然出现在任何人身上。@Cyber元素类型是
复杂的
,实际上是两个双倍的大小。所以总内存使用量是1280MB。是的,该内存可能应该动态分配,否则您将有一个地狱般的可执行大小…不幸的是,机器是共享的,我没有权限更新g++并且时间有点短!在
-O2
“他们仍然需要调用复杂构造函数几百万次”?当然可以
complex
是文本类型,它们的系数是
constexpr
。可能不是,这取决于编译器的实现。我不一定相信g++4.1会做这样的事情。我有点困惑,数组不是在运行时填充的。你的意思是将数组保存在一个单独的文本文件中吗?@user3744868:也许我有点困惑;你说“当我包含两个数据文件时”-这些数据文件中是什么?我假设你包括大的常量数据文件。这些数据文件包含文本。它们与#include一起导入,并替换一些变量(约10个)。然后,它们被用于处理数组的不同函数中。“在程序启动时将它们加载到内存中”是什么意思?当然可以
complex
是文本类型,它们的系数是
constexpr
。可能不是,这取决于编译器的实现。我不一定相信g++4.1会做这样的事情。我有点困惑,数组不是在运行时填充的。你的意思是将数组保存在一个单独的文本文件中吗?@user3744868:也许我有点困惑;你说“当我包含两个数据文件时”-这些数据文件中是什么?我假设你包括大的常量数据文件。这些数据文件包含文本。它们与#include一起导入,并替换一些变量(约10个)。然后,它们被用于处理数组的不同函数中。“在程序启动时将它们加载到内存”是什么意思
g++ -L/.../gsl  -I/../gsl -O2 -lgsl -lgslcblas  -Wall -o sim1 sim1.cp