【发布时间】:2017-02-18 15:18:28
【问题描述】:
- 结构的元素必须正确对齐,因此可以用未使用的字节填充结构。
- 结构的大小始终相同(因为它是一个常量表达式)。
所以我认为编译器每次都必须以某种方式使用相同的填充,例如:
- 放置单个结构实例
- 将结构实例按值传递给函数
- 从函数中按值返回结构实例
- 在结构数组中
如果我对这个假设是正确的,你能指出 C 标准在哪里这么说吗?是否有任何严格的填充放置规则来保证此属性?
【问题讨论】:
-
你的意思是“同一程序中结构的所有实例是否具有相同的布局”?
-
填充和对齐是实现定义的。它可能因编译器而异,甚至在不同平台上的相同编译器之间也可能不同。
-
理论上布局可能会在程序的不同运行之间发生变化
-
您问了一个关于标准的问题,标准中的编译时和运行时没有区别。 “运行时”可能包括解释代码(而不是编译),或调用 JIT 编译器
-
@M.M 好的,一开始我问的是 C,而不是 C++,所以我查看了 C 草案。以 N1548 第 105 页(第 6.6 段)为例,您应该会找到我的报价。
标签: c struct language-lawyer