内存对齐的三条原则

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 条评论
登录 后参与评论

相关文章

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

【选择题】Java基础测试七

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

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

05-02总结方法,数组(一维)

/* 练习题(1) 数组遍历:就是依次输出数组中的每一个元素。 注意:数组提供了一个属性length,用于获取数组的长度。 格式:数组名.lengt...

3597
来自专栏编程坑太多

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

1836
来自专栏杨建荣的学习笔记

通过shell来比较oracle和java中的字符串使用(r4笔记第49天)

今天在无意中看到了java字符串的一些东西,发现和oracle比较起来还是有一定的意义的,但是发现知识点准备好了,比较的时候,每一处java的变更都得重编译运行...

3395
来自专栏Java3y

希尔排序就这么简单

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

4256
来自专栏数据结构与算法

POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)

\(\sum_{i = 1}^k d_i \leqslant k(k - 1) + \sum_{i = k + 1}^n min(d_i, k)\)

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

1. A + B 问题

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

501
来自专栏数据结构与算法

1313 质因数分解

1313 质因数分解 2012年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目...

3687
来自专栏赵俊的Java专栏

加一

1443
来自专栏Python小屋

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

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

3113

扫码关注云+社区

领取腾讯云代金券