代码之家  ›  专栏  ›  技术社区  ›  fedj

数据对齐和继承问题

  •  0
  • fedj  · 技术社区  · 15 年前

    考虑到64位的这些结构:

    struct base
    {
      long a;
    };
    
    struct derived : public base
    {
      long b;
      char c;
    };
    

    对我来说,具有这种继承的数据是这样对齐的

    a
    b
    c
    

    所以a在8上对齐,b也在8上对齐,c是一个字符,在1上对齐。 那么这里有什么问题,为什么尺寸是24?

    2 回复  |  直到 15 年前
        1
  •  8
  •   Ben Jackson    15 年前

    大小是24,所以当你做一个数组 struct derived base::a .

        2
  •  1
  •   Diego Sevilla    15 年前

    __attribute__((packed))
    

    结构定义。你可以学习 this GCC documenation . 但是,我不确定在使用继承时可以对对齐做什么假设。特别是,如果使用虚拟函数,则大小可能会因结构中添加了一些指针而更改。

    推荐文章