• ベストアンサー

intやshortやcharの変数確保時間

for文などでよく一時変数に for ( int i=0; ・・・ とか for ( short s=0; ・・・ とか for ( char i=0; ・・・ みたいに整数型の変数が使われます。 確か変数の表せる範囲は long>int>short>char だったと思うのですが、変数を確保する時間やメモリサイズに違いはあるのでしょうか? たとえばlong型変数を10万個確保する時間とintとかshortとかcharのそれ とは違いがあるのかなぁと疑問に思いました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

一時変数の話ですよね? 「i386系の処理系で、一時変数に限定した話」であれば「どんな変数であっても、確保は一瞬で行われる」ので、型やサイズや個数が違っても、何の変わりもありません。 i386系では「一時変数はスタックに作られる」ので「確保動作は、CPUのSPレジスタを必要なだけ減算するのみ」で「全ての変数が一気に確保」されます。 例えば、ある関数をi386系のCPU用にコンパイルすると、アセンブラでは  push ebp      ;BPレジスタをスタックに退避  mov ebp,esp    ;現在のSPレジスタをBPレジスタにコピー  add esp,-0x10244 ;66116バイト分の一時変数を一気に確保  (ここから関数の中身)  mov esp,ebp    ;SPレジスタを元に戻し、一気に全部の変数を解放  pop ebp       ;BPレジスタをスタックから復帰  ret          ;呼び出し元に帰る となります。 このように「確保も解放も、1命令」で終ってます。

RockmanX
質問者

お礼

実践的な回答大変ありがとうございます。 とてもありがたいです。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> long>int>short>char > だったと思うのですが、 違います。 long ≧ int ≧ short ≧ signed char です。 > 変数を確保する時間やメモリサイズに違いはあるのでしょうか? 処理系や文脈によります。

RockmanX
質問者

お礼

確かに処理系によって変わるでしょうね・・

関連するQ&A