2017-06-15 8 views
3

遅いコンパイルします構造体の複雑な:好奇心からのstd ::私は、次のコードをコンパイルすることは非常に緩慢であることに気づいた

#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 'の配列サイズを半分にしてみてください – Justin

+0

フラッシュで作業しました - コンパイルするにはhttps://ideone.com/nrnA2yを参照してください。それは異なる投稿です –

+4

これはコンパイラのバグかもしれないので、どのコンパイラのバージョンが適切かを含めてください。いずれにせよ、このような大きなスタック割り当ては疑わしい。 – Arcinde

答えて

3

コンパイラは、コンパイル時にデフォルトのstd::complexコンストラクタを実行しているため、プログラムの起動時にこのループを実行するコードを生成するのではなく、すべての配列メンバの初期値を実行可能ファイルに格納できます。コンパイル中にコンストラクタを200万回呼び出しています。

関連する問題