【发布时间】:2014-10-26 00:28:08
【问题描述】:
这个结构的大小是多少? (32位系统计算。不是64位。)
struct list_element
{
short data;
struct list_element* next;
struct list_element* prev;
};
我试过用这些公式计算尺寸:
(sizeof(list_element*) + sizeof(short)) + ((sizeof(list_element*) * 2)
- (4 + 2) + (4 * 2) = 6 + 8 = 14
(sizeof(short)) + (sizeof(list_element*) * 2)
- 2 + (4 * 2) = 2 + 8 = 10
(sizeof(list_element*) + sizeof(list_element*) + sizeof(short)) + (sizeof(list_element*) * 2)
- (4 + 4 + 2) + (4 * 2) = 10 + 8 = 18
(sizeof(list_element*) + sizeof(list_element*) + sizeof(short))
- (4 + 4 + 2) = 10
但是,他们没有返回正确的答案。你用什么公式来计算这个结构的大小?
更新:
我的老师说我们忽略了数据对齐...希望这不会让任何人失望,因为您习惯于处理代码和结构的数据对齐...
更新 2 感谢您的帮助和数据对齐的介绍。
答案是 10 没有数据对齐...不知道为什么我这么急于使用 C 语言进行数据对齐...有趣吗?
此外,数据对齐的答案是 12。正如你们所解释的,您必须对短整数进行数据对齐以匹配整数。因此,您有 (2 + (2 个额外字节)) + 4 + 4 = 12。
【问题讨论】:
-
sizeof(struct list_element) -
(short with padding) + (struct list_element*)*2
-
没有公式可以给你正确的答案。你的 C 编译器可以决定使用尽可能多的额外填充字节,就像编写它的程序员感觉浪费一样!
-
那么“测验”就是垃圾,因为这是一个没有正确答案总是正确的问题。每个编译器都使它不同。我敢打赌,编写该测验的人只是检查了他自己的编译器上的内容。现在你比他聪明。删除测验。