問題① 1ビットのビットフィールドを1つだけ持つ構造体の大きさがどれだけになるか、調べてみてください。
#include <stdio.h>
struct MyStruct {
signed int a : 1;
};
int main(void)
{
struct MyStruct s;
("%zu\n", sizeof(s));
printf}
実行結果:
4
1ビットしか使っていなくても、実際の大きさは 4バイトとなりました。本編での解説のとおり、実際にはバイト単位の大きめの領域がとられます。その大きさ(記憶域単位)は、処理系定義です。
もう1つ試しに、33ビット使うようにしてみます。
#include <stdio.h>
struct MyStruct {
signed int a : 31;
signed int b : 2;
};
int main(void)
{
struct MyStruct s;
("%zu\n", sizeof(s));
printf}
実行結果:
8
今度は 8バイトになりました。1つの記憶域単位に納まりきらない場合のメモリの使い方は処理系定義ですが、いずれにしても、2つ分の記憶域単位を取らないと納まらないので、このような結果になります。
問題①でもそうですが、想定している大きさのとおりにはならないかもしれません。メモリの節約をしているつもりが、実は何も変わっていないこともあり得るので、このように実際に調べて確認することは重要です。
(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)新規作成。第55章に含まれていた内容を移動してきた。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |