【问题标题】:Struct size/alignment [duplicate]结构尺寸/对齐方式[重复]
【发布时间】:2020-11-01 10:24:39
【问题描述】:

struct 在 C 中的大小如何?例如下面的:

struct Person {
    char* name;
    char age;
};

int main(int argc, char* argv[]) {
    struct Person person1;
    person1.name = "John Smith";
    person1.age = 40;
    printf("The size of the Person object is: %lu.\n", sizeof(person1));
}

这给了我16 而不是9 的大小。那么struct 是如何对齐的,还是取决于架构或 C 实现?例如,是在 16 字节边界、8 字节边界等上吗?

【问题讨论】:

  • 很可能您使用的是 64 位系统,其中“字”(在 CPU 意义上)和指针是 64 位(8 字节)。
  • 依赖于实现。
  • @Someprogrammerdude 我明白了——所以所有structs 都会四舍五入到字长的下一个倍数?
  • 如果你想了解结构内成员的偏移量(位置),请使用offsetof宏。
  • 这取决于编译器和目标硬件。但是对于您的特定系统,可能是的。

标签: c memory-alignment


【解决方案1】:

它依赖于架构。但是您通常可以通过属性来控制大小或对齐方式。如果通过编译指示打包结构,则可以将大小设为 9 字节(假设指针为 8 字节)。

C struct size alignment

【讨论】:

  • 但是您冒着极大影响效率的风险。在 9 字节边界上迭代内存块将比 16 字节边界慢得多。
  • 这绝对是真的。我提到了如何获得特定的尺寸。在某些架构上,未对齐的数据访问也可能存在问题。打包结构非常依赖于使用情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 2010-12-28
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多