字节对齐

字节对齐的细节和编译器实现相关,一般满足三个准则:

  • 1.结构体变量的首地址能够被其最宽的基本类型成员的大小所整除
  • 2.结构体每个成员相对于结构体首地址的偏移量是成员大小的整数倍,如有需要编译器会在成员之间填充占位字节(internal padding)使之满足本条要求
  • 3.结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后添加占位字节(trailing padding),使之满足本条要求

数据类型自身的对齐值,一般情况下,char类型1字节,short类型2字节,int,float类型4字节,double类型8字节
另外,可以通过预处理指令#prama pack(N)指示编译器按照N字节对齐

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 4.3:新增class的相关内容 今天看到一个题目: 最开始简单的理解为,每个数据的size之和就是偏移量。因为偏...
    AwesomeAshe阅读 768评论 0 0
  • @[c++|struct] 今天在编程中碰到一个坑,搞的调试了半天,最后发现程序中在写数据和读取数据时结构体定义不...
    drybeans阅读 3,634评论 1 11
  • 通过一段代码来描述内存对齐的现象。 上述代码打印出来的结果为:24,16 为什么相同的结构体,只是交换了变量 ab...
    豆瓣菜阅读 6,827评论 5 26
  • (字节对齐的实现细节和编译器有关) 1. 基本概念 字节对齐:计算机存储系统中以Byte为单位存储数据,不同数据类...
    安然_fc00阅读 2,914评论 0 1
  • [TOC] 什么是字节对齐(可以跳过) 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类...
    youngyunxing阅读 5,421评论 4 8