是否有关于用于在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;
}
答案 0 :(得分:3)
通常,C中的结构对齐取决于所使用的编译器,尤其是处理结构声明时生效的编译器选项。您不能做出任何一般性假设,除非对于使用特定设置编译的特定程序中的特定结构,可以确定结构布局。
也就是说,您的猜测与大多数编译器可能与默认对齐设置完全匹配。