• c++地址对齐


    在一些计算机上,由于性能方面的原因,2个字节的变量,必须放在2的倍数的地址中,4个字节的,就必须放在4的倍数中的地址中,以此类推。

    也就是说,如果有3个占用两个字节的变量,分别为:A,B,C,如下图:

    &0   &1   &2   &3   &4   &5   &6   &7   &8   &9   &10   &11   &12

    A  A  B   B    C     C       

    这时,&0-&5的地址会被占用,每个地址为一个字节,因为A、B、C三个变量都是两字节,他们正好放在2的倍数的地址中,现在刚刚好。

    如果这时,又要加入一个4个字节的变量D,

    4字节的话,就要找4的倍数的内存地址,&4或者&8,

    然而&4已经被CC占用了,所以只能使用&8开始来存放这个变量,既:

    &0   &1   &2   &3   &4   &5   &6   &7   &8   &9   &10   &11   &12

    A  A  B   B    C     C                  D     D     D      D    

    可以看到,&0、&2、&4都是2的倍数,

    所以这三个地址可以顺利存放AA、BB、CC,

    因为他们都是2字节,但是DDDD就需要放在&8

    而中间就会空出两个字节 ,这时整个函数或者类,

    就会因为地址对齐的原因多出两个字节,本来应该只占用2+2+2+4=10个字节,

    现在就需要2+2+2+2+4=12个字节,这就是所谓的地址对齐。

    最近刚开始学C++,这是我的理解,不对的地方,还请各位大神指教。

  • 相关阅读:
    IOS开发--网络篇-->GCD(Grand Central Dispatch)的详解
    drf viewset
    12.6 drf 结构化组建
    12.5
    12.4
    12.3
    12.2
    12.1 angular vue react web前端三大主流框架的对比
    11.30
    11.28 过滤器的相关操作
  • 原文地址:https://www.cnblogs.com/agostop/p/3321244.html
Copyright © 2020-2023  润新知