は、Iは固定サイズのアレイメンバーとC/C++でstruct
を有すると仮定すると、例えば:コンパイラは、固定サイズの配列を持つ構造体を返す関数を最適化しますか?
#define SIZE 10000
struct foo{
int vector_i[SIZE];
float vector_f[SIZE];
};
及びIはfoo
のインスタンスを返す関数を作成したい、等:
foo func(int value_i, float value_f){
int i;
foo f;
for(i=0;i<SIZE;i++) f.vector_i[i] = value_i;
for(i=0;i<SIZE;i++) f.vector_f[i] = value_f;
return f;
}
私が使用して関数を呼び出す場合:
foo ff = func(1,1.1);
コンパイラは最適化のいくつかの種類(すなわちTCO)を実行しますか?
実行ファイルは直接ff
変数を記入します、またはそれはfunc
の最初f
を記入して、ff
へf
からすべての値をコピーしますか?
最適化が実行されているかどうかを確認するにはどうすればよいですか?
これは、ローカル変数として保持することは非常に巨大なオブジェクトです。私が正しく計算したら、それは625kb(32bitプラットフォーム)でなければなりません。Windows上では各スレッドのスタックが最大1MBになると思います。 – GeorgeAl
代わりに引数として構造体にポインタ(または参照)を渡します。それについて心配する必要はありません。 –
生成されたアセンブラを見ることができます。 C++では、コピーコンストラクタを定義し、それが呼び出されるかどうかを確認することもできます。 –