sizeofの疑問 – プログラミング – Home

通知
すべてクリア

[解決済] sizeofの疑問


ぶんた
 ぶんた
(@ぶんた)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

はじめまして、ぶんたと言います。
sizeof関数について質問させてください。

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

宜しくお願いします。


引用未解決
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

#pragma ディレクティブの packを調べて見てください

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

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

「メニューバー > 設定 > C/C++ > カテゴリ:コード生成 > 構造体メンバのアライメン
ト」の間違い。


返信引用
ぶんた
 ぶんた
(@ぶんた)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

tibさんへ

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

原因が分かりますか?


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

sizeof は函数ではありませんよ。型だけが実引数に渡せる函数が
あるんでしょうか?
しかもどんな型でもいいなんて函数はどう定義すればいいのでしょう?

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

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


返信引用
ぶんた
 ぶんた
(@ぶんた)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

#pragma pack(2)

 ・
 ・
#pragma pack()

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

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

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

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


返信引用
ぶんた
 ぶんた
(@ぶんた)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

ありがとうございます。

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

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

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


返信引用
ぶんた
 ぶんた
(@ぶんた)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

「解決済み」にするのを忘れていました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました