zoukankan      html  css  js  c++  java
  • 自对齐(self-aligned)

    C语言是自对齐的,32位以4字节对齐,64位以8字节对齐(1字节=8 bits)

    自对齐的好处:在一条指令内完成数据的取或者存的操作,使得内存访问更快;否则,如果一个变量跨机器字存储,那么要做两次或更多次的访问(先取存在前一个机器字的内容,再取存在后一个机器字的内容)。

    对齐要求

    • 字符可以起始于任何字节地址
    • 2字节的short int必须起始于偶数地址
    • 4字节的int或者float必须起始于被4整除的地址
    • 8字节的long int或者double必须起始于被8整除的地址
    • struct按照最宽成员进行指针对齐。如果struct中嵌套struct,外部struct要按照自己与内部struct中最宽的成员进行对齐。

    内存中的实际存储情况

    例1:代码

    char *p;
    char c;
    int x;

    内存中的存储

    char *p; //4 bytes(32位)或8 bytes(64位)
    char c; //1 byte
    char pad[3]; //3 bytes,无用空间,老派术语称之为slop(水坑)
    int x; // 4 bytes

    消除水坑

    可以通过改变变量声明的位置挤掉水坑。

    水坑发生于大数据类型的存储区域紧跟在一个较小的数据类型的存储区域之后。

    消除水坑的方法是按对齐的降序来对变量进行声明。

  • 相关阅读:
    中国剩余定理
    Codeforces 240 F. TorCoder
    ZOJ 1202 Divide and Count
    洛谷 3380 【模板】二逼平衡树(树状数组套权值线段树)
    bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)
    uva 10791
    uva 699 The Falling Leaves
    uva 839 Not so Mobile
    2017 济南综合班 Day 5
    2017 济南综合班 Day 4
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4969260.html
Copyright © 2011-2022 走看看