在 C++ 中,您可以使用__declspec( align( # ) )
声明符来控制用户定义数据的对齐方式。如何为 C# 做到这一点。我在我的 dll 中有两个用汇编程序编写的程序。过程的参数(两个数组)应该在 16 个字节上对齐。对于 C++,它工作正常。
我只是使用了声明
__declspec( align( 16 ) )
double a[2]={10.2,10.6};
如果您正在寻找托管到非托管互操作(在基于 C#/.NET 和基于 C/C++/汇编器的软件之间传输数据),您将使用StructLayout
属性和FieldOffset
属性的组合:
[StructLayout(LayoutKind.Explicit, Pack = 16)]
public class MyDataClass {
[FieldOffset(0)]
double[] a;
}
根据 MSDN:
System.Runtime.InteropServices.StructLayoutAttribute.Pack 字段确定目标对象的数据字段的内存对齐方式。