【发布时间】:2011-03-22 22:45:25
【问题描述】:
可能重复:
Why isn’t sizeof for a struct equal to the sum of sizeof of each member?
我想以前一定有人在 SO 上问过类似(重复)的问题。但我找不到它们。基本上我不知道要搜索什么。所以在这里问。
为什么结构的大小不等于其各个成员类型的大小之和? 我正在使用可视化 C++ 编译器。
例如,假设是 32 位机器。 {=> sizeof(int) == 4; sizeof(char) == 1; sizeof(short) == 2; }
struct {
int k;
char c;
} s;
预期大小为 4+1 = 5;但 sizeof(s) 给出 8。这里 char 占用 4 个字节而不是 1。我不知道确切原因,但我的猜测是编译器这样做是为了提高效率。
struct{
long long k;
int i;
} s;
预期大小为 4+4 = 8(在 32 位机器上)和 8+4=12(在 64 位机器上)。但奇怪的是 sizeof(s) 给出 16。这里 int 和 long long 都占用 8 个字节。
- 这东西叫什么?
- 到底发生了什么?
- 为什么编译器会这样做?
- 有没有办法告诉编译器停止这样做?
【问题讨论】:
-
第一次。投票结束我自己的问题。 :)
-
旁注:
sizeof(long long)在任何机器上都必须是 64 位的,因为它必须代表正负 (2^63 - 1)
标签: c visual-c++ compiler-construction