C での実験を続けて、ビット フィールドがメモリにどのように配置されるかを確認したいと思いました。私はIntel 64ビットマシンで作業しています。これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(int argc, char**argv){
struct box_props
{
unsigned int opaque : 1;
unsigned int fill_color : 3;
unsigned int : 4;
unsigned int show_border : 1;
unsigned int border_color : 3;
unsigned int border_style : 2;
unsigned int : 2;
};
struct box_props s;
memset(&s, 0, 32);
s.opaque = 1;
s.fill_color = 7;
s.show_border = 1;
s.border_color = 7;
s.border_style = 3;
int i;
printf("sizeof box_porps: %d sizeof unsigned int: %d\n", sizeof(struct box_props), sizeof(unsigned int));
char *ptr = (char *)&s;
for (i=0; i < sizeof(struct box_props); i++){
printf("%x = %x\n", ptr + i, *(ptr + i));
}
return 0;
出力は次のとおりです。
sizeof box_porps: 4 sizeof unsigned int: 4
5be6e2f0 = f
5be6e2f1 = 3f
5be6e2f2 = 0
5be6e2f3 = 0
そしてここに質問があります: なぜstruct box_props
size4
があるの2
ですか? その場合、パディングはどのように行われますか? 私は少し(前兆なし)混乱しています。
すべての回答について事前にThx