zoukankan      html  css  js  c++  java
  • 内存对齐

    看了好多次,感觉这一次才算是真正理解了

    #pragma pack(4)//可手动指定对齐值

    typedef struct DDD

    {

             char a;//1 起始位置可为1,2,3,4,5…….    这个放在位置1

             short b;//2起始位置可为1,2,4,6,8…..         这个需要放在位置2,故之前补1

             int c;//4 起始位置可为1,4,8,16…….               这个需要放在位置4,刚好是4

             double d;//8 起始位置可为1,8,16,24,32…..这个需要放在位置8,刚好是8

             char e;//1 这个需要放在位置9,刚好是9

    }AAA;//在最后,需要对整个结构体对齐,对齐方式是min(系统默认对齐值,max(char,int ,double) )

    #pragma pack(4) //用于指定在最后对齐的方式,和结构体中变量最大的长度相比取最小值进行外部对齐

    1、  首先按照结构体内部数据成员进行对齐

    2、  其次在内部对齐后在对整个结构体进行对齐

    下面具体来说,内部对齐时,每一个成员都按照自身大小的整数倍进行对齐,比如说int类型,必须放在起始位置为1、4、8、16….等位置。

    在内部对齐完成后,要对整个结构体进行对齐,这是的对齐方式就是min(系统默认对齐值,max(char,int ,double) )

     说明:这里说从1开始,实际上内存里地址是从0开始的,但是不影响理解

  • 相关阅读:
    mtk lk阶段的lcm流程
    MTK touchscreen 流程
    MTK DDR调试
    增加,删除GMS包
    最大最小背光亮度修改
    HDMI 8193 配置
    mtk6737t摄像头配置文件的编译
    camera调试命令
    Linux 终端显示 Git 当前所在分支
    ubuntu系统,关于源(source)的配置
  • 原文地址:https://www.cnblogs.com/songliquan/p/4346931.html
Copyright © 2011-2022 走看看