内存对齐的三条原则

1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。

2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)

3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐。

 1 typedef struct bb
 2 {
 3  int id;             //[0]....[3]
 4  double weight;      //[8].....[15]      原则1
 5  float height;      //[16]..[19],总长要为8的整数倍,补齐[20]...[23]     原则3
 6 }BB;
 7 typedef struct aa
 8 {
 9  char name[2];     //[0],[1]
10  int  id;         //[4]...[7]          原则1
11  double score;     //[8]....[15]    
12  short grade;    //[16],[17]        
13  BB b;             //[24]......[47]          原则2
14 }AA;
15 int main()
16 {
17   AA a;
18   cout<<sizeof(a)<<" "<<sizeof(BB)<<endl;
19   return 0;
20 }

结果是

48 24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

希尔排序就这么简单

一、希尔排序介绍 来源百度百科: 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort...

4086
来自专栏彭湖湾的编程世界

【算法】实现栈和队列

栈(stack) 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除 ? 可以将其类比于下面文件的取放操作:新到的文件会被先取走...

3356
来自专栏desperate633

LintCode 跳跃游戏题目分析代码

983
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试七

【选择题】Java基础测试七 86.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的?( B ) A、ArrayList m...

5193
来自专栏Python

python中列表的sort方法使用详解

一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 排序,数字、字符串按照ASC...

2069
来自专栏小二的折腾日记

LeetCode-60-Permutation-Sequence

同样是排列 组合的问题,这次不需要打印所有的排列了,只需要按照排列的顺序打印出第k个,很显然,思路不会是列出所有的排列,然后找第k个打印出来是吧。

794
来自专栏编程坑太多

数据结构与算法—选择排序(Java实现)

1626
来自专栏和蔼的张星的图像处理专栏

1. A + B 问题

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 不能用求和运算符肯定就是用一些最简单的逻辑运算符实现了。 如果没有进位的情况,可以了解用...

451
来自专栏Python小屋

Python版基于递归的冒泡排序算法

应读者要求,写个基于递归的冒泡排序算法代码,之前发过的排序算法代码请参考:Python版快速排序算法,Python版选择排序算法,Python版冒泡法排序算法。...

2913
来自专栏赵俊的Java专栏

加一

1383

扫码关注云+社区