sizeof()结构体对齐

struct Test1
{
char    name;
int     score;
Student *pNext;
};
struct Test2
{
char    name[3];
int     score;
Student *pNext;
};
struct Test3
{
char    name[6];
int     score;
Student *pNext;
};
struct Test4
{
char    name[30];
int     score;
Student *pNext;
};
void main()
{
    int len = sizeof(Test1);   //len = 12
    int len = sizeof(Test2);   //len = 12
    int len = sizeof(Test3);   //len = 16
    int len = sizeof(Test4);   //len = 40
}
//VS2008,编译器会将char    name[n];对齐为sizeof(int)的倍数。也就是4的倍数,如果不够4的倍数会+上最小的数字达到4的倍数。
因为这个结构体内占字节数最大的基本类型是int.

再举例,如果是这样
struct Test1
{
char    name[10];
int     score;
char    oldName;
};

struct Test2
{
char    name[10];
short     score;
char    oldName;
};
void main()
{
    int len = sizeof(Test1);   //len = 20
    int len = sizeof(Test2);   //len = 14
}
test1 把结构体内的属性以sizeof(int)对齐,char name[10]补齐到12,char    oldName补齐
到4,所以12 + 4 +4 =20。
test2以sizeof(short)对齐,10 = sizeof(name)已经是2的倍数,不用补齐。所以是12 + 2 + 2
=14

 

顺序的影响

typedef struct _AAA
{
char b;
double a;
char c;
}AAA;

typedef struct _AAA
{
char b;
char c;
double a;

}AAA2;

void main()
{
len = sizeof(AAA);          //len 24
len = sizeof(AAA2);        //len 16
}

 

posted @   奥雷连诺  阅读(190)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示