c#-我们可以对结构布局进行假设吗?

是否有用于在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;
}
最佳答案
通常,C语言中的结构对齐方式取决于所使用的编译器,尤其是在处理结构声明时有效的编译器选项.除了说对于使用特定设置编译的特定程序中的特定结构可以确定结构布局之外,您无法做出任何一般性假设.

就是说,您的猜测与大多数编译器可能使用默认对齐设置所做的非常接近.

转载注明原文:c#-我们可以对结构布局进行假设吗? - 代码日志