纠正下方结构的对齐情况。
typedef struct{
char *string; // 4 byte (type of address int)
char temp; // 1 byte
short pick; // 2 byte
char temp2; // 1 byte
}hello;
给出答案,良好的对齐是
char *string; // 4 byte (type of address int)
short pick; // 2 byte
char temp; // 1 byte
char temp2; // 1 byte
无法理解temp2应该偏移7而不是8的原因怎么样?请帮忙
答案 0 :(得分:0)
+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+
| string | pick | t1| t2|
+---+---+---+---+---+---+---+---+
对t1
使用temp
,t2
使用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。