1.一般要能占满4或者8的整数倍才行。比如说
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct S1
{
char c1;
char c2;
int i;
}s1;
int main()
{
printf("%d\n", sizeof(s1));
return 0;
}
最后sizeof会是8,我的理解是,char占了两个比特位,4的空间装不下int了,只能在下一块内存装了,int占4个字节,所以sizeof(s1)是8
而导致这一切的根本原因就是内存对齐:
那么什么是内存对齐?
是这样的:不是所有的硬件平台都能访问任意地址上的数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则会抛出异常。
而且数据结构中应该尽可能的在自然边界上对齐,原因在于为了访问未对齐的内存,处理器需要两次内存的访问,而对齐的内存访问仅仅需要一次访问即可。
2.位段
位段 目的是为了节省空间
位段的成员可以是 int unsigned int 或者char
位段后面有一个冒号有一个数字
注意位段后面是比特不是字节
3.联合共用体