> 処理を早くするためポインタを使えと。
> ポインタを使うと早くなるんでしょうか?
ポインタを使うべき場所で使えば早くなりますが,直接アクセスで十分なところに使えば遅くなります。
> 上記回答から拝見すると4つも利用してしまっては意味がなくなってしまうのでしょうか?
> あまり多いと、普段の変数と同じ場所に用意されてしまうのでしょうか?
えーっと,一般的なPCで使われているX86アーキテクチャだと,
EAX, EBX, ECX, EDX, ESI, EDI
の6個あたり,頑張ってESPくらいが限界になります。
後でレジスタについて説明を書きますが,じゃあ7個使えるかというとそうではなく,現実的にはESI, EDI程度が使えれば良い方です。
# X64だとR8~R15が増えるんだったかな……。あと,面倒なのでMMX以降の特殊用途レジスタやセグメントセレクタ等も省略。
なので,ループ変数に気休め程度に指定する,というのが通常かと。
# or 指定しない。
どちらにしても,ほとんどはauto扱い (つまりは普通の変数と同じ扱い) になると思います。
また,registerよりも変数割付に適した変数をコンパイラが発見した場合,そちらをレジスタに割り当てることもあります。
組み込み系などで細かく制御ができる場合はちゃんと指定するのでしょうが……。
> 「レジスタ」というものを初めて聞きましたけど、普段用意する場所より早くアクセスできる場所の事なのでしょうか?
レジスタとは,CPUが唯一直接アクセス可能な超高速メモリ群です。
# というあたりがコンピュータ工学的な説明でしょうか。
基本的に,CPUはレジスタ間でしか計算を実行できません。
# X86系統だとレジスタとメモリの間での演算やメモリと即値の演算を許していたりはしますが……。
そのため,非常に高速にアクセスができるようになっています。
もちろん,1次キャッシュよりも何十倍も速くアクセス可能です。
ただし,それだけに量が限られます。
多くてもKBの単位ではないでしょうか。
# RISCならたくさんあるやつがあると思うので……。
で,X86のように数の特に少ないCPUでは,頑張って使い回すことになります。
このあたりはアセンブリ言語を使うといやと言うほど体感させられます。
> 規格書欲しいな
http://webstore.ansi.org/ansidocstore/default.aspで,INCITS/ISO/IEC 9899:1999とINCITS/ISO/IEC 14882:2003がともに$30で売っていますよ。
英語になりますが,JISだと片方だけでも万に届くので,それを考えれば格安です。
# 私が買ったときは$26と$18だったはず……。元値で変動がある上に為替相場が関連するので,相場を読んだ方が安く買えます。