C#控制数据的对齐

bos*_*man 7 c# interop

在C++中,您可以使用__declspec( align( # ) )声明符来控制用户定义数据的对齐方式.如何为C#做到这一点.我的dll中有两个写在Assembler上的程序.过程的参数(两个数组)应该在16个字节上对齐.对于C++,它工作正常.

我刚刚使用了声明

__declspec( align( 16 ) )
double a[2]={10.2,10.6};
Run Code Online (Sandbox Code Playgroud)

And*_*lad 8

如果您正在寻找托管到非托管互操作(在基于C#/.NET和基于C/C++ /汇编器的软件之间传输数据),您将使用StructLayout属性和FieldOffset属性的组合:

[StructLayout(LayoutKind.Explicit, Pack = 16)]
public class MyDataClass {
    [FieldOffset(0)]
    double[] a;
}
Run Code Online (Sandbox Code Playgroud)

根据MSDN:

System.Runtime.InteropServices.StructLayoutAttribute.Pack字段确定目标对象的数据字段的内存对齐方式.

http://support.microsoft.com/kb/922785