概述
关键点:
1、结构体第一个成员的地址在offset为0的地方开始
2、第一个成员后面的成员以offset为基点开始地址偏移
3、结构体成员相对于offset偏移的地址是自己大小的整数倍
4、在最后一个成员处,如果该处偏移offset的地址不是所有成员中最大成员的整数倍,就在后面补齐
5、如果成员是结构体或者数组,先计算该结构体大小,再按照成员的规则偏移
计算对齐的思路(牢记上面的关键点):
1、从第一个成员开始,offset=0
2、根据第二个成员大小,计算出整数倍的地址(在offset的基础上计算)
3、第三个也是如此(按照第二个)
4、最后一个成员地址计算和上面一样,可是,计算出来的最终地址还要和成员中最大的那个比较,在本成员后面增加地址,使得结构体大小是最大成员的整数倍
例子-1:
//大小为16
struct easy_struct{
char ch_1; //[0]
int int_4; //[4]->[7]
float float_4; //[8]->[11]
char ch_2; //[12]+[13]
short sh_2; //[14]->[15]
};
例子-2:
//大小为48
struct str_struct{
int int_1_4; //[0]->[3]
short sh_1_2; //[4]->[5]
int int_2_4; //[8]->[11]
char ch_1; //[12]->[15]
double db_8; //[16]->[23]
struct easy_struct es_str;//[24]->[39]
char ch_2; //[40]->[41]
short sh_2_2; //[42]->[48]
};
参考的文章(写得非常好):https://blog.csdn.net/hairetz/article/details/4084088
最后
以上就是鲤鱼八宝粥为你收集整理的结构体内存地址对齐的理解的全部内容,希望文章能够帮你解决结构体内存地址对齐的理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复