我有一些代码可以用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标志。
提前谢谢!
答案 0 :(得分:5)
我确实遇到过将大型常量数据数组解析为C ++源代码时g ++性能不佳的情况。一种改进方法是将大数据数组存储在输入文件中,并在程序启动时将它们加载到内存中。这将以运行时少量启动处理为代价来修复编译性能问题。
请注意,即使您的常量数组编译运行,它们仍然需要调用complex<double>
构造函数几百万次,因此从文件中读取可能不会花费太多。