グローバル変数と静的変数がフェッチされる命令はいくつですか? ローカル変数または自動変数が 1 つのマイクロプロセッサ命令でフェッチされることはわかっていますが、グローバル変数と静的変数はいくつの命令でフェッチされますか? ヒープから動的変数をフェッチするのと同じコストがかかりますか? または少し少ない。
3 に答える
答えは次のいずれかです。
(a) 数千。グローバル変数は現在マップされていないメモリ内にあるため、それにアクセスすると例外が発生し、オペレーティング システムがページをロードします。
(b) グローバル変数は、変数にアクセスする前にロードしてリンクする必要がある動的ライブラリにあるため、多くの場合。
(c) 変数のアドレスをパーツや再配置情報から組み立てる必要があるため、いくつか。
(d) 1 つは、アドレスが命令内の即値データおよび/またはグローバル データ ポインターなどの既にレジスター内にあるデータから計算されるためです。
(e) ゼロ。最適化により変数が以前の操作からレジスタに保持されているためです。
グローバル変数と静的変数がフェッチされる命令はいくつですか?
ゼロ (すでにレジスターにキャッシュされている) から、多くの要因に応じて多数まで。
私たちが知っているように、ローカル変数または自動変数は 1 つのマイクロプロセッサ命令でフェッチされます [...]
実装固有の制限を超えるほとんどのオブジェクトには当てはまらないため、これを知ることはできません。そして、その制限が 0 である可能性が高く、すべてのロードに数百ではないにしても数十の命令が必要なCインタープリターがあります。
コンピューターのアーキテクチャとコンテキストによって異なります。C 仕様ではこれを指定しておらず、使用しているコンパイラと最適化オプションによって異なります。