• ベストアンサー

for文に使用する変数

よく for(i=0;i<10;i++){ ”なんらかの処理” } みたいなソースがありますがここで使用する変数iはint型がよいと何かでみました。 数値が1byteで足りる分にはcharのほうがメモリ節約ができると思うのですが、どういった理由があるのでしょうか? どなたか知っている方はお教えください。

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

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

まず、iがレジスタに割り付けられる場合について考えます。1バイトの汎用レジスタがない場合は、たとえchar型で宣言しても、レジスタのサイズになってしまいます。 次に、メモリに割り付けられる場合ですが、静的記憶域ならともかく、自動記憶域の場合は、スタック操作を容易にするために、レジスタと同じサイズに境界調整される場合が多いようです。複数のchar型変数を使うのでない限り、いくらchar型で宣言しても、int型に満たない部分は未使用領域になってしまう場合が多いと思います。 レジスタであれ、メモリであれ、int型未満の変数は、何らかの演算のたびに汎整数拡張と上位ビットの切捨て処理が発生します。通常プログラムもメモリを必要とするので、処理が煩雑になった分、変数の容量以上にメモリが必要になります。 組み込み用では、効率化のために汎整数拡張を行わない非標準処理系も存在します。その様な場合、その処理系ごとにどんな選択が一番よいかは調べる必要があります。

KXWonderful
質問者

お礼

ありがとうございました。勉強になりました。

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 んっと。int型は、特にそれがC言語(含むC++)である場合、「そのCPUがもっとも自然に解釈できるサイズ」とあります(そのためにあちこちでサイズが違って困るのですが)。 したがって、計算をするのに一番楽な型であるということになります。 ちなみに、charで計算を行うときは一度intにおきなおしてから…になるためにかえってコストがかかってしまいます。

KXWonderful
質問者

お礼

ありがとうございました。一度intにおきかえることになるということなんですね。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

intは、原則としてその環境でもっとも標準的に扱える型となっています。16bitマシンでは16 bit, 64bitマシンでは64bitです。 メモリの最適化よりも、速度の最適化を目指しているわけですね。 もっとも、8bitマシンでは、intは16bitで実装されている場合もあり、例外はあります。 また、組み込み用など、メモリの最適化が重視されるときは、その限りではありません。

KXWonderful
質問者

お礼

ありがとうございました。

関連するQ&A