C语言内存对齐(结构体)浅析-创新互联
首先把结构体中的内存对齐的规则梳理一下:
创新互联公司是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:成都做网站、网站制作、成都外贸网站建设、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。1、结构体中的第一个成员存放的首地址是零偏移处
2、结构体成员数据存放的首地址必须是有效对齐参数的整数倍,而有效对齐参数是系统默认对齐参数和数据自身对齐参数两者中的最小值
3、结构体的大小必须是所有成员中的大有效对齐参数的整数倍
4、结构体在内存中是按照顺序存放的
特别注意对齐是相对于结构体变量首地址(即第一个成员存放的首地址)来说的,举个例子:
我们定一个结构体变量如下
struct _test_st
{
uint08 a;
uint32 b;
uint16 c;
}test_st;
结构体变量test_st成员a存放在偏移量为0的地址中,由于对齐规则,b就存放在偏移量为4的地址中,c就存放在偏移量为8的地址中(后面会具体分析)。
接下来进入实战分析。
下面按照系统默认4字节对齐来讲述。
我们定义3个结构体变量:
typedef struct _test_st_1
{
uint08 a1;
uint32 b1;
uint16 c1;
}test_st_1;
typedf struct _test_st_2
{
uint08 a2;
test_st_1 b2;
uint16 c2;
}test_st_2;
typedef struct _test_st_3
{
uint08 a3;
uint64 b3;
uint16 c3;
}test_st_3;
test_st_1 st1;
test_st_2 st2;
test_st_3 st3;
uint08 array[48];
uint08 len_1
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:C语言内存对齐(结构体)浅析-创新互联
文章分享:http://myzitong.com/article/dpodoj.html