-1

更正下面的结构对齐是不好的。

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(偏移量 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
  • 选择 + 温度 + temp2(偏移量 7)= 2+1+1

无法理解 temp2 应该位于偏移量 7 而不是 8 的原因。如何?请帮忙

4

1 回答 1

0
+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+
|    string     | pick  | t1| t2|
+---+---+---+---+---+---+---+---+

使用t1fortempt2for temp2,这是修改后的布局。的偏移量t2为 7。

对于 n 字节数量与 n 字节对齐的系统上的原始结构,布局将是:

+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B |
+---+---+---+---+---+---+---+---+---+---+---+---+
|    string     | t1|pad| pick  | t2|pad|pad|pad|
+---+---+---+---+---+---+---+---+---+---+---+---+

那是因为 4 字节指针需要 4 字节对齐,所以结构的数组需要每个成员是 4 字节的倍数。

因此,在原始结构中,t2 的偏移量应该是 8,而不是 7。

于 2013-10-21T05:27:46.307 回答