【发布时间】:2023-04-06 04:53:01
【问题描述】:
考虑到int占用4个字节,char占用1个字节,下面结构占用的大小应该是9 [ 4 + 1 + 4 ],但实际上是12个字节[ 4 + 4 + 4 ]。
原因:char y保留4字节内存,y占用1字节,其余3字节未使用。
struct some_struct {
int x;
char y;
int z;
};
问题 1: 那么为什么编译器会这样呢? (假设我有一个 X8086 架构)
问题2:如果它是一个联合(不是结构)怎么办?
非常感谢大家的回答,我意识到我应该只在发布问题之前在 SO 上搜索它。
【问题讨论】:
-
1.因为对齐。 2. 如果你有一本好书呢?
-
这个问题经常出现。我发现了一个这样的副本。答案是padding。
-
结构中为什么会出现日期类型的填充,是因为代码的访问效率。有关详细信息,请参阅en.wikipedia.org/wiki/Data_structure_alignment。不能使用
union代替,因为它的作用与struct不同,除非您真的想要union的作用,即在同一 mememoy 位置重叠所有成员。 -
@ac_c0der 你真的是说8086吗? AFAIR,8086 是 16 位,所以我猜,填充(如果有的话)将是 2 个字节,而不是 4...
标签: c++ c memory-management compiler-construction struct