2017-01-10 5 views
0

コンパイル時の変数の初期化があると、プログラムを実行時の初期化よりも高速に実行できることは、メモリを動的に割り当てる必要があるためです。初期オーバーヘッドを超えたランタイム割り当ての影響

質問:ダイナミックに割り当てられたメモリは、最初の割り当てオーバーヘッドを超えてプログラムのパフォーマンスに長期的な影響を及ぼしますか?ダイナミックメモリにアクセスする方がコストがかかりますか?私の質問は特にFortranについてですが、おそらくCなどにも関係します。

したがって、一連の配列のサイズを初期化して計算を開始する初期コマンドライン引数があると、プログラムをその引数を定数パラメータとして設定し、異なるサイズの配列で計算するたびに再コンパイルするのと比較して、

+2

「ダイナミックメモリにアクセスすることはそれほどコストがかかりませんか? _large_静的配列を考えてみましょう。各要素は1に初期化され、大きな動的配列は1に割り当てられます。小さいファイルはどれですか?大きな静的配列のサイズは、 'malloc()'や 'memcpy()'が実行するよりも_load_に時間がかかることがあります。例を投稿することをお勧めします。そうでなければ、これは単なる理論的なことです。 – chux

答えて

1

あなたが求めているのは、システムによって大きく異なります。動的メモリよりも静的データを最適化できるシステムが存在する可能性があります。 FORTRAN委員会がFORTRADA 90の忌み嫌われて狂った前日に、FORTRANはすべて静的だった。 FORTRANコンパイラでも静的呼び出しフレームを使用するのが一般的でした。すべての静的なパフォーマンスを向上させる理論的な可能性があります。

つまり、ダイナミックメモリが割り当てられると、ほとんどすべてのケースで静的データにアクセスするよりアクセスが遅くなる可能性が高くなります。

関連する問題