Blittable 类型

Blittable 类型

Blittable 类型是托管代码和本机代码中具有相同位级别表示形式的类型。 因此,无需将这些类型转换为其他格式即可往返本机代码进行封送,而且由于这样可以提高性能,应首选这些类型。

byte, sbyte, short, ushort, int, uint, long, ulong, single, double

Blittable 类型的非嵌套一维数组(例如,int[])

具有实例字段只有 blittable 值类型的固定布局的结构和类

固定的布局需要 [StructLayout(LayoutKind.Sequential)] 或 [StructLayout(LayoutKind.Explicit)]

默认情况下结构为 LayoutKind.Sequential,类为 LayoutKind.Auto

不是 blittable:

bool

有时为 blittable:

char, string

通过引用传递 blittable 类型时,这些类型只会被封送处理程序固定,而不会复制到中间缓冲区。 (类在本质上通过引用传递,结构在与 ref 或 out 结合使用时会通过引用传递。)

如果 char 位于一维数组中,或者如果它是包含使用 CharSet = CharSet.Unicode 的 [StructLayout] 显式标记的类型的一部分,则该类型为 blittable。

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]publicstructUnicodeCharStruct{publiccharc;}

如果 string 不包含在其他类型中,并且作为使用 [MarshalAs(UnmanagedType.LPWStr)] 标记的参数传递或 [DllImport] 已设置 CharSet = CharSet.Unicode,则该类型为 blittable。

可以通过尝试创建固定的 GCHandle 来查看类型是否为 blittable。 如果该类型不是字符串或被视为 blittable,则 GCHandle.Alloc 将引发 ArgumentException。

✔️ 尽可能使结构为 blittable。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,952评论 0 5
  • [TOC] 内存管理 一、托管堆基础 在面向对象中,每个类型代表一种可使用的资源,要使用该资源,必须为代表资源的类...
    _秦同学_阅读 4,128评论 0 3
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,450评论 0 10
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 3,172评论 2 9
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 4,202评论 1 10

友情链接更多精彩内容