ビットフィールド 解答ページ | Programming Place Plus C言語編 第56章

トップページC言語編第56章

問題①

問題① 1ビットのビットフィールドを1つだけ持つ構造体の大きさがどれだけになるか、調べてみてください。


#include <stdio.h>

struct MyStruct {
    signed int  a : 1;
};

int main(void)
{
    struct MyStruct s;

    printf("%zu\n", sizeof(s));
}

実行結果

4

1ビットしか使っていなくても、実際の大きさは 4バイトとなりました。本編での解説のとおり、実際にはバイト単位の大きめの領域がとられます。その大きさ(記憶域単位)は、処理系定義です。

もう1つ試しに、33ビット使うようにしてみます。

#include <stdio.h>

struct MyStruct {
    signed int  a : 31;
    signed int  b : 2;
};

int main(void)
{
    struct MyStruct s;

    printf("%zu\n", sizeof(s));
}

実行結果

8

今度は 8バイトになりました。1つの記憶域単位に納まりきらない場合のメモリの使い方は処理系定義ですが、いずれにしても、2つ分の記憶域単位を取らないと納まらないので、このような結果になります。

問題①でもそうですが、想定している大きさのとおりにはならないかもしれません。メモリの節約をしているつもりが、実は何も変わっていないこともあり得るので、このように実際に調べて確認することは重要です。


参考リンク


更新履歴

’2018/5/19 新規作成。第55章に含まれていた内容を移動してきた。



第56章のメインページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る