【发布时间】:2014-02-09 15:26:18
【问题描述】:
考虑以下代码段:
struct MixedData {
char a;
short b;
char c;
long d;
char e;
};
int main() {
cout<<sizeof(MixedData)<<endl;
}
(忽略 C++ 语法,因为这里不是问题)
这段代码的输出是 24,我不太明白为什么。
我将表示:
C: char
S: 短
L: 长
P:编译器填充
和每个 | |是一个字节。
据我所知,数据对齐方式是:
|C|P|S|S|C|P|P|P|L|L|L|L|L|L|L|L|C|P|P|P|
所以输出应该是 20,不是吗? 有趣的是,当 MixedData 变成:
struct MixedData {
char a;
short b;
char c;
int d;
char e;
};
大小变为 16,应该是这样。
有人对此有解释吗?
【问题讨论】:
-
你平台上的
sizeof(long)是什么? -
8 个字节。已经检查过了。
标签: c struct alignment primitive-types