• ベストアンサー

sizeofの処理

お世話になります sizeof()の処理について教えてください typedef struct {   BYTE m_bDat;   WORD m_wWord; }tTEMP; sizeof( tTEMP ); この場合、アライメントは最小としたとして、サイズは3と帰ってくるとします。 アライメントをコンパイルオプション等を使用して、2として再度sizeofを行います この際、値は4となると思います 知りたいのは、sizeofの処理方法です よろしくお願い致します

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「処理方法」というのがよくわからんのだけど, sizeof はコンパイラが処理しちゃってますね. 例えば, アラインメントが 2 のときには, コンパイラが「BYTE の次の WORD を詰めるとアライン境界にそろわないから 1バイト間に入れよう」と思って 4バイトにするだけ.

その他の回答 (3)

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.4

↓詳しい説明 データ型のアラインメントとは何か,なぜ必要なのか? http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html ⇒ sizeof とアラインメントの関係   (sizeof がアラインメントの倍数に切り上げって知ってます?)

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

質問への回答は既に出ていますが、少しだけ補足します。 sizeof演算子は、基本的にはコンパイル時に解決されるものですが、オペランドによっては実行時に解決されることもあります。 例えば、 void func(int n) {  int array[n];  printf("sizeof(array) = %zu\n", sizeof(array)); } のようなケースです。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

sizeofは、コンパイラが計算した構造体のサイズのデータを数値としてプログラム中に埋め込んでしまう機能です。 実行時に構造体のサイズを計算していませんので、sizeofの処理方法は?と聞かれればコンパイラの処理の一部としか言えません。

関連するQ&A

専門家に質問してみよう