首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于对象表示和托管/非托管交互的结构/类元数据

用于对象表示和托管/非托管交互的结构/类元数据
EN

Stack Overflow用户
提问于 2021-04-19 07:13:35
回答 1查看 85关注 0票数 1

我知道有很多类似的问题,但我想了解非常特定于方面,这些方面在任何地方都没有提到。在这两种情况下:托管(本例中为净运行时)和本机/unmanaged (c、cpp等)

从这里拍摄:https://adamsitnik.com/Value-Types-vs-Reference-Types

不仅没有掩盖,甚至也没有提到的第一个问题是,您的代码/运行时应该如何知道您正在处理的是哪种类型的结构?如果struct只是将它的所有数据打包在一起,那么关于它是什么类型的元数据在哪里呢?好的,在托管.NET运行时和二进制文件的情况下,它更容易,它是IL的一部分,但是本地二进制代码呢?如果您打开它进行文本读取,则在二进制文件中没有函数或结构名称。如果没有结构元数据,您如何知道运行时接收的是什么结构,以及如何处理/解析它?指针只是指向内存,但没有结构的结构和成员存储在那里。至少可以通过它所拥有的额外数据(对象头和方法表)来识别类。

当您从非托管/本机空间接收到结构化数据时,甚至会使更加混乱。您需要将这些数据嵌入到struct中,否则您如何知道您收到了什么?我甚至无法开始理解,这对于类似的类是如何工作的,因为它们比类要复杂上千倍。您如何从非托管空间返回类?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 07:21:09

如果struct只是它所有的数据打包在一起,那么关于它是哪种类型的结构的元数据在哪里?

根本就没有。对于原始值数据--无论是单个值,还是数组/向量/任何东西,消费代码都知道如何解释它。它是公正的:字节。

,如果没有结构元数据,您如何知道运行时接收的是什么结构,以及如何处理/解析它?

因为它是在API中定义的,或者是在签名中定义的,或者是用诸如“指针引用len类型的Foo元素的开始”之类的人工词定义的。

需要将数据嵌入到struct中。

不,你没有;你只需要事先同意你要发送/接收的内容。这就是绝大多数不同代码库之间的交互是如何工作的,而且一直都是这样工作的。拥有对象元数据是异常,而不是规范。

,您如何从非托管空间返回类?

如果这种上下文中的“类”指的是托管对象,则不会。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67157461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档