【发布时间】:2021-07-13 09:10:59
【问题描述】:
我知道有很多类似的问题,但我想了解非常具体的方面,而这些方面从未在任何地方提及。在这两种情况下:托管(在这种情况下为 NET 运行时)和本机/非托管(c、cpp 等)
取自这里:
https://adamsitnik.com/Value-Types-vs-Reference-Types
第一个不仅没有被掩盖而且甚至没有提及的问题是您的代码/运行时应该如何知道您正在处理的结构类型?如果 struct 只是将所有数据打包在一起,那么关于它是什么类型的 struct 的元数据在哪里?好的,在托管 .NET 运行时和二进制文件的情况下,它更容易,它是 IL 的一部分,但是本机二进制代码呢?它被剥离 100%,如果您打开它进行文本阅读,那么二进制文件中没有函数或结构名称。如果没有结构元数据,您将如何知道运行时收到的结构以及如何处理/解析它?指针只指向内存,但没有存储结构和成员。至少类可以通过它拥有的额外数据(对象头和方法表)来识别。
当您从非托管/本机空间接收结构数据时,事情会变得更加更加混乱。您需要将该数据嵌入到结构中,否则您怎么知道收到了什么?而且我甚至无法开始理解*这对于诸如类之类的东西是如何工作的,因为它们要复杂千倍。您甚至如何从非托管空间返回课程?
【问题讨论】: