【发布时间】:2010-08-24 05:17:56
【问题描述】:
我得到了这样的结构:
struct bar {
char x;
char *y;
};
我可以假设在 32 位系统上,char 的填充将使其总共 4 个字节,而 32 位的指针是 4,所以总大小将是 8 对吗?
我知道这都是特定于实现的,但我认为如果它在 1-4 内,它应该填充到 4,在 5-8 到 8 和 9-16 在 16 内,对吗?它似乎工作。
我会说结构在 x64 架构中是 12 字节,因为指针是 8 字节吗?或者你认为应该是什么?
【问题讨论】:
-
为什么不问问编译器——它会用
sizeof运算符告诉你。 -
你为什么想知道?内存使用?结构布局兼容性?指针访问结构?
-
你已经知道这是实现定义的。所以问这些问题是愚蠢的。您的任何假设都不能在所有情况下都被认为是有效的,它们只是假设(有时它们会是真实的,而其他情况则不是)。编译器可以随意添加填充,甚至可以使用不同的标志更改填充。
-
当您的分析器说这是造成瓶颈的原因并且当您在封闭系统中耗尽内存时,请担心字段对齐和大小问题。否则,请关注稳健性和正确性。