先頭へ戻る

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

Programming Place Plus トップページ -- C言語編 -- 第56章

先頭へ戻る

問題①

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


#include <stdio.h>

struct MyStruct {
    signed int  a : 1;
};

int main(void)
{
    struct MyStruct s;

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

    return 0;
}

実行結果

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) );

    return 0;
}

実行結果

8

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

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


参考リンク


------------------------------------------------------------------------

更新履歴

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



第56章のメインページへ

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー