我们可以对结构布局做出假设吗?

时间:2011-10-08 23:36:53

标签: c# c compiler-construction interop struct

是否有关于用于在C上进行结构布局的算法的约定?

我希望能够在vm中运行代码,以便能够使用与C对应项兼容的结构,就像C#interop一样。为此,我需要知道对齐算法是如何工作的。我认为必须有一个对话,因为它在C#上很好用。我想到了他们用来解决这个问题的可能算法,但我没有找到任何证明它是正确的算法。

以下是我认为它的工作原理:

为每个声明的字段(按声明顺序)

  • 查看该字段是否适合剩余的字节(直到下一个对齐)
  • 如果不合适,请对齐此字段;否则将其添加到当前偏移量

例如,在32位系统上的结构如:

{
byte b1;
byte b2;
int32 i1;
byte b3;
}
使用此算法

会是这样的:

{
byte b1;
byte b2;
byte[2] align1;
int32 i1;
byte b3;
byte[3] align2;
}

1 个答案:

答案 0 :(得分:3)

通常,C中的结构对齐取决于所使用的编译器,尤其是处理结构声明时生效的编译器选项。您不能做出任何一般性假设,除非对于使用特定设置编译的特定程序中的特定结构,可以确定结构布局。

也就是说,您的猜测与大多数编译器可能默认对齐设置完全匹配。