课程咨询 :18087159764

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

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

  • 结构体变量占据的内存单元的个数应当大于等于其内部所有数据成员占据内存单元数的和。这句话广州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详细说明

最新开班日期  |  更多

c++--零基础周末班

c++--零基础周末班

开班日期:6月30日

c++--零基础全日制班

c++--零基础全日制班

开班日期:6月30日

c++--免费训练营

c++--免费训练营

开班日期:6月30日

c++--高薪就业班

c++--高薪就业班

开班日期:6月30日

  • 网址:http://gz.c.tedu.cn     地址:广州市天河北五山路 141 号尚德大厦 627
  • 课程培训电话:18087159764     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56