广州C/C++培训
达内广州岗顶中心

18087159764

热门课程

关于结构体内存分配对齐深入理解

  • 时间:2016-08-25
  • 发布:广州C++培训
  • 来源:C++技术网

结构体变量占据的内存单元的个数应当大于等于其内部所有数据成员占据内存单元数的和。这句话广州C++培训相信学过结构体的都知道,但是这句话给很多初学者带来的误区(这句话本身没有问题,很多C语言书里面有这句话),但是有些人再用sizeof(struct a)求字节大小的时候就会发现问题

如果按照“结构体变量占据的内存单元的个数应当大于等于其内部所有数据成员占据内存单元数的和。”这句话来理解输出就是int占了4个字节,double占用8个字节,char定义一个数组占用了9个字节所以总用21个字节,但是结果不是这样。

接下来广州C++培训来解释一下原因:

首先要知道出于效率的考虑,C语言引入了字节对齐机制,一般来说,不同的编译器字节对齐机制有所不同,但还是有以下3条通用准则:

(1)结构体变量的大小能够被其最宽基本类型成员的大小所整除;

(2)结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;

(3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。

(所谓基本类型是指像char、short、int、float、double这样的内置数据类型。“数据宽度”就是指其sizeof的大小。诸如结构体、共用体和数组等都不是基本数据类型)

为什么编译器要这样做,其实就是为了提高程序的效率,对齐后使得每一个字节步长都一样,系统执行起来速度就会加快

上一篇:广州C++培训:新手编写头文件(仅适新手)
下一篇:时间类型time_t详细说明

华硕ZenBook/VivoBook全面更新

中国工程师破解苹果iOS11.2支持7.5W无线快充

HTC推出VR一体机:骁龙835+AMOLED屏

REM响应式编程是个什么鬼?

选择城市和中心
贵州省

广西省

海南省