zoukankan      html  css  js  c++  java
  • 字节对齐总结

    1.字节对齐的缘由?

    一句话说就是提高存取效率,存取效率与机器相关,比如有的机器总是从偶数字节开始取数据;同时,存取效率也和数据类型相关,比如如果取一个整型数字时,若能够一次取出来肯定是最好,但是若由于机器取数据总是从偶数字节开始这个原因花了两次访问,那么肯定会降低效率了。

    2.字符对齐中的一些概念?

    • #pragma pack(n):表示显式声明机器的对齐字节为n,我们记这个数字为MA,每个机器都有默认的MA,刚才那句话的意思是改变MA,要恢复系统默认MA,语法是#pragma pack()
    • 有效对齐字节:以结构体为例进行分析,对于结构体中每个成员,它本身字节对齐要求至少得满足起始地址是本身大小的整数倍,但是如果MA小于它本身大小,那么要求对齐数为MA,在任何需要对齐的地方,有效对齐字节=min(MA,数据对齐字节)
    • 什么时候需要对齐?对于结构体,其每一个成员需要对齐,最后整个结构体的大小也需要对齐

    3.对齐的原则(以结构体为例)

    • 对于结构体中每一个元素,对齐大小为min(MA,自身大小)
    • 结构体的首地址必须与min(MA,结构体中最大体积元素大小)对齐,注意不是min(MA,结构体大小)
    • 结构体最终大小需为min(MA,结构体中最大体积大小)对齐
    • C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。即如果不用#pragma pack(n) ,那么相当于n无穷大

    另外二种种说法:

    image

    image

    4.需要注意的是,sizeof函数取的是占用的栈空间,因此static 成员不会计算在内。

    主要参考:1.字节对齐(强制对齐以及自然对齐)  2.对齐实例(包括union)

    PS:这个总结只是为自己总结的,所以我只图自己方便了,所以可能讲得不是很详尽,当然,如果大家看到了有些帮助那做好不过了,如果有些讲得不对的地方,请指出来。

  • 相关阅读:
    解决chrome浏览器自动填充密码
    linux top命令详解
    经纬度互换、换算成米、两点的经纬度计算两点间的距离
    js 调用声音提示
    centos7 kdump.service启动失败的解决方法
    Postman 工具模拟Ajax请求
    CentOs7 安装最新版的Git
    Nginx日志切割之Logrotate篇
    mysql让主键id重新排序
    阿里云大文件解压函数计算
  • 原文地址:https://www.cnblogs.com/obama/p/3308623.html
Copyright © 2011-2022 走看看