こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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のそれ
とは違いがあるのかなぁと疑問に思いました。

投稿日時 - 2009-03-13 03:29:18

QNo.4792265

暇なときに回答ください

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

一時変数の話ですよね?

「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命令」で終ってます。

投稿日時 - 2009-03-13 14:05:23

お礼

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

投稿日時 - 2009-03-26 06:28:03

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> long>int>short>char
> だったと思うのですが、

違います。
long ≧ int ≧ short ≧ signed char
です。

> 変数を確保する時間やメモリサイズに違いはあるのでしょうか?

処理系や文脈によります。

投稿日時 - 2009-03-13 08:11:54

お礼

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

投稿日時 - 2009-03-26 06:28:55

あなたにオススメの質問