いくつかのブログやサイトは、ポインターが有益であると話していました。原因の1つは、ポインターがないプログラムよりもポインターがあるプログラムの方が「実行速度」が優れているためです。私が解決できることは次のとおりです。
単一の場所を間接参照するには、2つ(またはそれ以上)のメモリアクセスが必要です(間接参照の数によって異なります)。これにより、直接使用した場合と比較して、実行時間が長くなります。
構造体/共用体のアドレスのみがコピーされ、値によって渡されないため、構造体などの関数への大きなデータ型へのポインターを渡すことは有益な場合があります。したがって、この場合は高速になるはずです。
たとえば、次のように、ポインタを強制的に導入する必要はありません。
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?
アセンブラの出力を使用してチェックしましたgcc -S -masm=intel file.c
。ポインタバージョンには、直接法よりも多くのメモリのロードと逆参照のための格納があります。
私は何かが足りないのですか?
注:質問はコードだけに関連しているわけではありません。コードは単なる例です。コンパイラの最適化を考慮していません。