代码之家  ›  专栏  ›  技术社区  ›  mukesh kudi

结构内存分配,内存分配应该是4的倍数

  •  0
  • mukesh kudi  · 技术社区  · 6 年前
    struct x
    {
      char b;
      short s;
      char bb;
    };
    
    
    int main()
    {
     printf("%d",sizeof(struct x));
    }
    

    输出为:6

    我的解释 -->1。Char需要1个字节,而下一个short需要2的倍数,因此short创建一个1的填充,并需要2个字节,这里已经分配了4个字节。现在,唯一的左char成员需要1个字节,但是由于内存分配是4的倍数,所以总内存是8个字节。

    2 回复  |  直到 6 年前
        1
  •  5
  •   Stephan Lechner    6 年前

    结构的对齐要求是具有最大对齐的构件的对齐要求。这里的最大对齐是 short ,所以可能 2 . 因此,两个代表 b ,两个 s ,两个给我 bb 给6分。

        2
  •  0
  •   Tomer Wolberg    6 年前

    C结构内存布局是完全特定于实现的,您不能假设所有这些。

    另外,在C结构的典型对齐方式中,结构如下:

    struct MyData
    {
        short Data1;
        short Data2;
        short Data3;
    };
    

    看到了吗 https://en.wikipedia.org/wiki/Data_structure_alignment