に整列されていないこれは私があることを、この構造体の大きさを期待していた、よく非常に多く、それは私のマシン上で8であることを出てくる私のプログラムサイズはバイト境界
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
struct bitfield {
unsigned a:3;
char b;
unsigned c:5;
int d;
}bit;
printf("%lu \n",sizeof(bit));
return 0;
}
ですunsignedは4バイトであるためです。私がそれ以上のものになることを期待していた理由は、char b
がバイト境界にあることが予想され、メモリに正しく配置されるためです。今私の推測では、コンパイラは、これらの4バイトにa、b、cを入れているということです。私はCの新人ですので、私と一緒に抱きしめてください。ビットフィールド以外の他のデータ型は、必ずしも正しくないバイトでなければならないと私は想定していますか?それが正しければ、私は、a
は、符号なし整数全体を取ると期待し、b
はバイトを取って3バイトのパディングをしています。私はここで何が欠けていますか?
これはおそらくあなたの質問に答えます:[ビットフィールドを持つ構造体のサイズはどのように決定/測定されますか?](https://stackoverflow.com/questions/4129961/how-is-the-size-of-a-struct-with-bit-fields-determined-measured) –
いいえ、それはありません。私は、ビットフィールドサイズがどのように測定されるのか知っています私の質問は、私は文字が間にある場合は、どのように測定されるのですか? – user3491702
簡単に言えば、できるだけビットフィールドから遠く離れないようにしてください。世界に一つの理由がありません。それで、なぜあなたは 'a 'がunsigned int全体と同じ空間を占めると思うのですか?これはビットフィールドです。前後に何が来るのかにかかわらず、3ビットを占めます。 –