zoukankan      html  css  js  c++  java
  • C语言中的对齐(Align)规则

    Data structure alignment is the way data is arranged and accessed in computer memory. It consists of three separate but related issues: data alignment, data structure padding, and packing. --wikipeida

    The following typical alignments are valid for compilers from Microsoft (Visual C++), Borland/CodeGear (C++Builder), Digital Mars (DMC), and GNU (GCC) when compiling for 32-bit x86:
    A char (one byte) will be 1-byte aligned.
    A short (two bytes) will be 2-byte aligned.
    An int (four bytes) will be 4-byte aligned.
    A long (four bytes) will be 4-byte aligned.
    A float (four bytes) will be 4-byte aligned.
    A double (eight bytes) will be 8-byte aligned on Windows and 4-byte aligned on Linux (8-byte with -malign-double compile time option).
    A long long (eight bytes) will be 4-byte aligned.
    A long double (ten bytes with C++Builder and DMC, eight bytes with Visual C++, twelve bytes with GCC) will be 8-byte aligned with C++Builder, 2-byte aligned with DMC, 8-byte aligned with Visual C++, and 4-byte aligned with GCC.
    Any pointer (four bytes) will be 4-byte aligned. (e.g.: char, int)

    The only notable differences in alignment for an LP64 64-bit system when compared to a 32-bit system are:
    A long (eight bytes) will be 8-byte aligned.
    A double (eight bytes) will be 8-byte aligned.
    A long long (eight bytes) will be 8-byte aligned.
    A long double (eight bytes with Visual C++, sixteen bytes with GCC) will be 8-byte aligned with Visual C++ and 16-byte aligned with GCC.
    Any pointer (eight bytes) will be 8-byte aligned.

    Example

    struct MixedData
    {
        char Data1;
        short Data2;
        int Data3;
        char Data4;
    };
    

    After compiled:

    struct MixedData  /* After compilation in 32-bit x86 machine */
    {
        char Data1; /* 1 byte */
        char Padding1[1]; /* 1 byte for the following 'short' to be aligned on a 2 byte boundary
    assuming that the address where structure begins is an even number */
        short Data2; /* 2 bytes */
        int Data3;  /* 4 bytes - largest structure member */
        char Data4; /* 1 byte */
        char Padding2[3]; /* 3 bytes to make total size of the structure 12 bytes */
    };
    
  • 相关阅读:
    ios添加pre和post build action
    Highcharts将数据以图表的形式展现
    【deep learning学习笔记】注释yusugomori的LR代码 --- 模型测试
    九乘九口诀算法
    JMS学习的个人理解笔记
    php与文件操作
    java 泛型
    约定
    写给自己,毕业三年,薪水涨了12倍,你信吗
    好技术领导和差技术领导区别在哪里--转
  • 原文地址:https://www.cnblogs.com/sonnet/p/15187489.html
Copyright © 2011-2022 走看看