ポインタのあるプログラムについて、ポインタなしのプログラムより "実行速度"が向上するため、ポインタに関する有益な情報があるブログやサイトがあります。単一の場所を間接参照すると、2が必要ですポインタと実行速度
(またはそれ以上)のメモリは、(間接の数に応じて)アクセス:私は仕事ができる事はということです。これは、直接使用された場合と比較して、実行時間を増加させます。
構造体/共用体のアドレスだけがコピーされ、値渡しされないため、構造体のような大きなデータ型へのポインタを関数に渡すと効果的です。したがって、この場合は速くなるはずです。
例えば
同じように必要とすることなく、ポインタを導入する力によって:私はgcc -S -masm=intel file.c
ポインタのバージョンを使用してアセンブラ出力を確認
int a, b, *p, *q, c, *d;
p = &a;
q = &b;
d = &c
// get values in a, b
*d = *p + *q; // why the heck this would be faster
c = a + b; // than this code?
はロードメモリをたくさん持っているし、直接よりも逆参照のために保存します方法。
何か不足していますか?
注:質問は単なるコードとは関係ありません。コードは単なる例です。コンパイラの最適化を考慮しません。
「有益」または「より良い」は、あるものと他のものを比較する場合にのみ使用できます。ですから、質問は著者がexecutinのスピードを比較したものです。構造体を渡すことについて構造体ポインタを使用すると、ポインタはより速くなります - それぞれの構造体が頻繁に使用されない場合他のことに関しては、それは大きく依存する。 – glglgl
最善のケースでは、関係する型がわかっている場合、コンパイラはすでに参照を解除することができるため、両方のバージョンが同等です。あなたの例を '-O2'でコンパイルし、ポインタがどのように最適化されているかを見てください。 – matthias
コンパイラの最適化は考慮していませんが、主なポイントは、ポインタを使用すると、ある種の "魔法のような"理由で実行速度が向上するかどうかです。あるいは、ポインタは、メモリアドレスとして使用する整数を保持する通常の変数と考えるべきであり、いくつかの構文では、そのような値を保持するために使用するコンパイラ識別子を伝えます。 – phoxis