- ベストアンサー
sizeofの処理
お世話になります sizeof()の処理について教えてください typedef struct { BYTE m_bDat; WORD m_wWord; }tTEMP; sizeof( tTEMP ); この場合、アライメントは最小としたとして、サイズは3と帰ってくるとします。 アライメントをコンパイルオプション等を使用して、2として再度sizeofを行います この際、値は4となると思います 知りたいのは、sizeofの処理方法です よろしくお願い致します
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「処理方法」というのがよくわからんのだけど, sizeof はコンパイラが処理しちゃってますね. 例えば, アラインメントが 2 のときには, コンパイラが「BYTE の次の WORD を詰めるとアライン境界にそろわないから 1バイト間に入れよう」と思って 4バイトにするだけ.
その他の回答 (3)
- noocyte
- ベストアンサー率58% (171/291)
↓詳しい説明 データ型のアラインメントとは何か,なぜ必要なのか? http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html ⇒ sizeof とアラインメントの関係 (sizeof がアラインメントの倍数に切り上げって知ってます?)
- jacta
- ベストアンサー率26% (845/3158)
質問への回答は既に出ていますが、少しだけ補足します。 sizeof演算子は、基本的にはコンパイル時に解決されるものですが、オペランドによっては実行時に解決されることもあります。 例えば、 void func(int n) { int array[n]; printf("sizeof(array) = %zu\n", sizeof(array)); } のようなケースです。
- zwi
- ベストアンサー率56% (730/1282)
sizeofは、コンパイラが計算した構造体のサイズのデータを数値としてプログラム中に埋め込んでしまう機能です。 実行時に構造体のサイズを計算していませんので、sizeofの処理方法は?と聞かれればコンパイラの処理の一部としか言えません。