sizeofの疑問

[戻る]
ぶんた 2002/11/07(木) 18:13:54
はじめまして、ぶんたと言います。
sizeof関数について質問させてください。

sizeofを使用すると、その変数などのバイト数を返してくれますよね。
構造体でも使用できるはずなのに、帰ってくる値が違うのです。
たとえば、2つのint型、1つのshort intの構造体、
struct data {
 int   a;
 int   b;
 short int c;
};
実際にsizeof使用すると、「12」が帰ってきます。
このdata構造体の記憶容量のバイト数は「10」ではないのですか?

宜しくお願いします。

不良PG 2002/11/07(木) 18:26:34
#pragma ディレクティブの packを調べて見てください

#pragma pack(2)
>struct data {
> int   a;
> int   b;
> short int c;
>};
#pragma pack()

にすると10バイトが返ってくるかな・・

tib 2002/11/07(木) 18:26:38
dummy領域に2byte取っているのでしょう。
「メニューバー > 設定 > C/C++ > 構造体メンバのアライメント」の設定はどうなってい
ますか?

tib 2002/11/07(木) 18:27:51
「メニューバー > 設定 > C/C++ > カテゴリ:コード生成 > 構造体メンバのアライメン
ト」の間違い。

ぶんた 2002/11/07(木) 18:35:08
tibさんへ

見てみたところ、「8バイト*」になっています。

原因が分かりますか?

2002/11/07(木) 18:36:16
sizeof は函数ではありませんよ。型だけが実引数に渡せる函数が
あるんでしょうか?
しかもどんな型でもいいなんて函数はどう定義すればいいのでしょう?

sizeof で 12 が返ってきたら 12 です(その時点では)
どんな値が返ってくるかは設定次第なので (VC では) 10 だとか 12
だとか一概に決め付けることは出来ません

#pragma pack や #pragma push 等について調べてみましょう
アラインメントに付いても調べてみましょう

ぶんた 2002/11/07(木) 18:43:29
#pragma pack(2)
  ・
 ・
 ・
#pragma pack()

を試してみたら、10が帰ってきました。

sizeofは演算子でしたね。間違えました。

#pragma pack や #pragma push 等について調べてみようと思います。

tib 2002/11/07(木) 18:43:46
そのアライメントの値はいくつか選択肢がありますよね。それぞれに設定してビルドし直
してsizeof()がいくつを返してくるか試してみてください。

ぶんた 2002/11/07(木) 18:49:30
ありがとうございます。

アライメントの値を変えて、試してみようと思います。

今まで、意識していなかったです。

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

ぶんた 2002/11/07(木) 22:44:55
[[解決]]
「解決済み」にするのを忘れていました。

古いスレッドには追加発言できません。