Blittable 类型

大多数数据类型在托管和非托管内存中具有共同的表示形式,而且不需要互操作封送处理程序进行特殊处理。 这些类型称为 blittable 类型,因为它们在托管和非托管代码之间传递时不需要进行转换。而且由于这样可以提高性能,因此应首选这些类型。
blittable类型:
属于blittable类型的复杂类型:
blittable 基元类型的一维数组,如整数数组。 但是,包含 blittable 类型变量数组的类型本身不是 blittable 类型。
所有只包含 blittable 类型(和作为格式化类型进行封送的类)的格式化的值类型。

non-blittable类型

在非托管环境中,某些托管数据类型要求具有不同的表示形式。 必须将这些非 blittable 数据类型转换为可以封送的形式。 例如,托管字符串就是非 blittable 类型,因为这些字符串必须转换为字符串对象后才能进行封送。
Non-blittable 类型 描述
System.Array 转换为 C 样式数组或 SAFEARRAY。
System.Boolean 转换为 1、2 或 4 字节的值,true 表示 1 或 -1。
System.Char 转换为 Unicode 或 ANSI 字符。
System.Class 转换为类接口。
System.Object 转换为变量或接口。
System.Mdarray 转换为 C 样式数组或 SAFEARRAY。
System.String 转换为空引用中的终止字符串或转换为 BSTR。
System.Valuetype 转换为具有固定内存布局的结构。
System.Szarray 转换为 C 样式数组或 SAFEARRAY。
委托是引用静态方法或类实例的数据结构,也是non-blittable类型。