sizeof一个结构体的大小

struct A {
char a;
char b;
char c;
};

A的大小为何事3啊,(32位机器),第一个char应该会分配4字节的空间,后面b,c再填在a后面,cpu取的时候应该是4啊

阅读 4.1k
3 个回答

C里面结构体大小的问题,一般考虑几个补齐就行。
首先,每个成员的开始位置和自己的大小对齐,char的话因为是1,所以不用考虑。最后,整个结构体的大小和结构体中的占用位数最大的成员对齐。
如果说你这个结构体是

struct A {
    char a;
    int b;
    char c;
};

那么第一个成员a就占用四个字节:char实际占一个,为了满足b的对齐条件(int占4个字节),在a后面补上三个字节。
跟cpu一次取多少数据无关。

3个char 不是3个字节么?为啥第一个char 会分配4个字节呢?

因为这个结构体所有成员大小都是1,怎么除都能整除,所以不用补齐。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进