在结构体中使用std::complex导致编译速度变慢。

3

我注意到以下的代码编译速度极慢:(甚至在我的电脑上都无法完成)

#include <complex>

struct some_big_struct {
    std::complex <double> a[1000000][2];
};

some_big_struct a;

int main () {
    return 0;
}

出于好奇,我还尝试了其他代码的替代方案。然而,在我的电脑上似乎这些代码可以很好地编译:

#include <complex>

struct some_big_struct {
    double a[1000000][2];
};

some_big_struct a;

int main () {
    return 0;
}

并且

#include <complex>

std::complex <double> a[1000000][2];

int main () {
    return 0;
}

我想知道有人能否分享一些关于为什么会出现这种情况的见解。谢谢!


1
尝试将 std::complex<double> 数组大小减半。 - Justin
在闪存中工作 - 请参见 https://ideone.com/nrnA2y 进行编译。至于运行,这是一个不同的帖子。 - Ed Heal
4
可能是编译器的一个错误,因此包括编译器版本很重要。无论如何,这样一个大的堆栈分配是值得怀疑的。 - jcai
我的电脑编译大约需要0.02秒。我使用的编译器是g++ - cplusplusrat
3
这是一个全局变量,不是局部变量。 - Barmar
你有没有考虑使用两个 std::vector<std::complex<double>> 呢? - Henri Menke
1个回答

3
编译器在编译时可能会使用默认的std :: complex构造函数,以便可以将所有数组成员的初始化值放入可执行文件中,而不是生成在程序启动时执行此循环的代码。因此,在编译时调用构造函数200万次。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接