一,内存对齐的概念:
是编译器的“管辖范围”。
二,内存对齐的条件:
1,结构体成员存放的地址要能满足整除该成员本身大小。
eg:
struct A
{
char a;//1个字节+3个字节
int b;//4个字节
};//8个字节
2,前面所有成员的大小相加应该是当前成员大小的倍数。
eg:
struct B
{
int a;//4个字节
char b;//1个字节+1个字节
short c;//2个字节
};//8个字节
3,整个结构体的大小应该是单个最大成员的倍数。
eg:
struct C
{
char a;//1个字节+3个字节
int b;//4个字节
short c;//2个字节
};//12个字节(4+4+2+2)
三,内存对齐的某些特殊情况
结构体内有结构体
struct D
{
char a;//1个字节+3个字节
struct DD
{
int b;//4个字节
long c;//4个字节
}d;//8个字节
};//12个字节
struct E
{
char a;//1
struct EE
{
int b;
long c;
};//0个(没有定义变量)
};//1个字节
4242

被折叠的 条评论
为什么被折叠?



