【问题标题】:Slack byte in structures in CC中结构中的松弛字节
【发布时间】:2010-07-07 09:34:50
【问题描述】:

C 结构中的松弛字节是什么意思?

【问题讨论】:

    标签: c struct structure


    【解决方案1】:

    通常填充字节以确保数据正确对齐。例如:

    struct x {
        int a;     // four bytes
        char b;    // one byte
                   // three bytes slack
        int c;     // four bytes
    } xx;
    

    bc 之间可能会有松弛字节,以使 c 在正确的边界上对齐。

    您可以通过查看 sizeif(xx) 为您提供的内容来检查这一点(在上述情况下为 12,尽管这取决于实现)。

    如果某些架构必须使用(例如)未在四字节边界上对齐的四字节值,则它们的运行速度会变慢。 一些架构根本不允许这样做,而是生成异常。

    【讨论】:

    • y 只在 b 和 c 之间,y 不在 a 和 b 之间。因为 int 是 2 个字节,char 是 1 个字节,所以 slack 字节的大小是多少。
    • @mohit,可能不在 a 和 b 之间,因为 char 很可能可以在 1 字节边界上对齐。如果 int 是两个字节,那么在 b 之后可能只有 1 个字节的 slack。
    • 还有一个疑问,松弛字节是否总是存在于结构中,或者是一些特殊情况。
    • 大多数架构根本不允许这样做。例外恰好是最常见的架构 x86。
    • @mohit,唯一没有填充字节的情况是结构的元素自然对齐。大多数优秀的程序员设计将用作库 API 一部分的结构(您必须担心版本之间的兼容性等)会注意结构自然对齐。微软因没有这样做而臭名昭著,而是对编译器使用非标准的“打包”指令来强制它生成未对齐的结构元素。
    【解决方案2】:
    struct student 
    {
         char a;//it takes 8 byte
         char b;
         char c;
         char d;
         int e;
    };
    
    struct student1;
    {
         char a;
         int b;
         char c;//it takes 12 byte(suppose sizeof(int)=4;
    }
    

    学生被视为:

    ____________________
    |char|char|char|char|   // one byte for each char so there is no slack=4byte
    |____|____|____|____|
    ____________________
    |int |  * | *  |*   |   // int takes for byte;=4byte total space is 4+4=8;
    |____|____|____|____|
    

    student1 被视为:

    ____________________
    |char| s  |s   | s  |   // one byte for char
    |____|____|____|____|   // s indicates a slack byte..=4byte
    ____________________
    |int |*   |*   |*   |   //int takes four bytes;=4byte
    |____|____|____|____|
     ___________________
    |char| s  |s   | s  |   // one byte for char
    |____|____|____|____|   // s indicates a slack byte..=4byte
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多