【发布时间】:2013-10-29 11:20:45
【问题描述】:
更正下面那个不好的结构对齐方式。
typedef struct{
char *string; // 4 byte (type of address int)
char temp; // 1 byte
short pick; // 2 byte
char temp2; // 1 byte
}hello;
- 字符串 = 4
- temp + pick + temp2(offset 7) = 1+2+1
给出的答案,良好的对齐是
char *string; // 4 byte (type of address int)
short pick; // 2 byte
char temp; // 1 byte
char temp2; // 1 byte
- 字符串 = 4
- pick + temp + temp2(offset 7) = 2+1+1
无法理解 temp2 应位于偏移量 7 而不是 8 的原因。如何?请帮忙
【问题讨论】:
-
您在这里指的是哪个问题和哪个答案?你指的平台是什么? char* 是 4 字节(32 位)或 8 字节(64 位),所以不确定你何时说 2 字节
-
刚刚编辑了帖子,忽略了问答部分,把它当作32位平台..
-
还是错了:在 32 位平台上,指针是 4 字节,int 总是 4 字节(不管是 32 位还是 64 位)。 Short 是 2 个字节,char 是 1 个字节,尝试通过以下方式读取:msdn.microsoft.com/en-us/library/ms253949(v=vs.80).aspx
-
@Sarang: int 在 64 位平台 (ILP64) 上可以是 64 位。
-
感谢您的参考,您是正确的地址是 int 并且是 4 字节,但在两种情况下 temp2 的偏移量仍然保持不变(7)..