変数の型とCPUの関係についてです。
何度か質問しているのですが・・・どうも理解できません。
頭が痛いです。
int型を例に取りましょう。
自分の環境では、int型4バイトです。
8bit = 1byteとします。
int型のサイズは処理系依存と言われます。しかし、この処理系依存という言葉・・・具体的に何を指しているんだろう?という疑問があります。
CPUやOS,コンパイラ・・・etc.
「組み込み現場のC言語」という本には
int型のサイズはビット長はレジスタ長に依存する
とあります。つまりCPUですね。
[C++] intのサイズはコンパイラやプロセッサに依存しますか?
16ビットマシンでは、sizeof(int)は2バイトでした。 32ビットマシンはint場合4バイトです。 intサイズはプロセッサのネイティブサイズ、つまりレジスタのサイズであると考えられています。 しかし、32ビットコンピュータは非常に人気があり、32ビットプログラミングモデル用に膨大な数のソフトウェアが作成されています。 したがって、64ビットコンピュータがintために8バイトを持つなら、それは非常に混乱します。 LinuxとWindowsはともにint 4バイトのままです。
え?
つまり、現在はint型はCPUに依存したサイズではない・・・ということですよね?
「昔はint型のサイズはレジスタ長に依存していたよ。」
「でも今は違うよ・・・」
どうやっているのでしょうか??
ハードウェアに関係なく、OSやコンパイラはどのようにしてint型のサイズを決定しているのでしょうか??
int型のサイズがCPUレジスタ長に依存していないと、さらに問題が出てきます。
そう!ややこしいアライメントです。
アライメントとか、ワード境界とか
int型のサイズがハードウェアではなく、OSやコンパイラによって随時変わるのであれば、アライメントもハードウェアとは関係無いということですか??
そんなことは無いはずです。
アライメントは型のサイズごとに決められているはずです。
char = 1byte, int = 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]
メモリレイアウトはこんな感じになるんですかね。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/24 22:24
2018/07/24 22:29
2018/07/24 22:58
2018/07/25 01:39
2018/07/25 02:56
2018/07/25 04:01
2018/07/25 04:14
2018/07/25 06:03
2018/07/25 06:17
2018/07/25 11:33