参考:CLR Via C#, Second Edition, by Jeffrey Richter
CLR自动排列类型实例中的字段以提高性能(如将相关性引用聚合在一起)。但我们仍然可以手动指定排列顺序:
[StructLayout(LayoutKind.Auto)]自动排列
[StructLayout(LayoutKind.Sequential)]保留我们的字段布局
[StructLayout(LayoutKind.Explicit)]指定偏移量
例如:
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
internal struct SomeValType
{
[FieldOffset(0)] Byte b;
[FieldOffset(0)] Int16 x;
}
指定偏移量主要用在非托管c/c++中的union(联合)中。如上例,指定多个字段起始于内存中的同个偏移地址。
注意:一个引用类型和一个值类型重叠是非法的。
多个引用类型重叠虽不非法,但无法校验。
多个值类型重叠合法,但所有重叠的字节都必需通过公共字段访问,使类型可校验。
CLR自动排列类型实例中的字段以提高性能(如将相关性引用聚合在一起)。但我们仍然可以手动指定排列顺序:
[StructLayout(LayoutKind.Auto)]自动排列
[StructLayout(LayoutKind.Sequential)]保留我们的字段布局
[StructLayout(LayoutKind.Explicit)]指定偏移量
例如:
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
internal struct SomeValType
{
[FieldOffset(0)] Byte b;
[FieldOffset(0)] Int16 x;
}
指定偏移量主要用在非托管c/c++中的union(联合)中。如上例,指定多个字段起始于内存中的同个偏移地址。
注意:一个引用类型和一个值类型重叠是非法的。
多个引用类型重叠虽不非法,但无法校验。
多个值类型重叠合法,但所有重叠的字节都必需通过公共字段访问,使类型可校验。
浙公网安备 33010602011771号