質問: 4byte **となると・・・CPUのアーキテクチャやデータバス幅やレジスタ長もアライメントには関係ないことになりませんか??** なんか・・・変ですね。 意味不明です。 アライメントは変数の型によって異なる。 **では変数の型(int型やchar型)のサイズは何によって決定されているんでしょうか??** 例えば、1byteの連続な列を4つまとめて、int型としたとしましょう。 ハードウェアでこれを行っているなら、OSが異なっていても、CPUが同じであれば、int型のサイズは変わらないはずですよね? OSによって変わる・・・? どういうことでしょうか?? これはマズイですよね。 そうするとCPUごとに決められたアライメントもOSによって変わっちゃうってことですよね? これでは読み書きの高速化には繋がらないような・・・気がしますが・・・ 分かる方教えてください。 どこかにとんでもない勘違いをしている可能性があります。 [追記] んんんん!!ああ!やっとわかったかもしれません。 「1byteの連続な列を4つまとめて、int型としたとしましょう。」 これがまさにアライメントなのですね! つまり、4つの1byteなデータを連続して並べる事をアライメント・・・って言うんですね! (間違っていたら教えてください。) データ型のアラインメントとは何か,なぜ必要なのか? アラインされていないデータへのアクセスの蘭のを見てみると、4バイトデータXがバラバラの位置に配置されていますよね。 これを、**4つ連続に並べること**こそがアライメントなんでしょうか?? (だとしたら、アライメントの理解を完全に間違っていたことになります。) もしそうだとしたら・・・ いままで、こんなことを考えていました。 「4バイトのint型を連続に並べてint型のアライメントを2に小さくすれば、データを共有できるのでは?」← これ不可能ですね。 4バイトint型のアライメントを2にすると、2個の1byteが連続で並び、その2つの組は連続であることは保証されなくなる。ということですかね。 int 4byte => [1byte][1byte][ ][ ][1byte][1byte] メモリレイアウトはこんな感じになるんですかね。
回答: int のサイズは、コンパイラの都合、でしかないです。 それ以上でも以下でもありません