【发布时间】:2021-06-02 03:55:31
【问题描述】:
我最近在学习 qemu 和 qom。当我遇到ObjectClass 和Object 的概念时,我感到很困惑。我已经明白ObjectClass 代表类,而Object 代表类实例。但是,我想知道的是ObjectClass中应该存储什么样的信息以及Object中发生了什么。
就我而言,像 C++ 或 Java 一样,Object 与 Class 中的定义相同em> 并在实际逻辑中使用。在这种情况下,Class 看起来像是一个模板,它产生了真正的 Object 被使用。
在 qemu 中,一切似乎都不同了。 我们在两个struct中定义了这两个,他们有不同的properties,这就导致了Class和Object的分离.这是否意味着我可以使用一个ObjectClass 来生成许多彼此不同的Object?其次,我为什么要这样做?这种模式有什么优点吗?详细来说,ObjectClass 和 Object 在 qemu 中分别扮演什么角色?而他们的关系呢?如果我想设计一个新设备,MyObjectClass和MyObject的初始化应该怎么做?
另外,我注意到qemu会用TypeImpl初始化每个ObjectClass,而TypeInfo是由开发者定义的。
TypeInfo => ModuleEntry => TypeImpl => ObjectClass => Object
当然,他们做不同的事情。 TypeInfo在执行main函数之前转换为ModuleEntry(__attribute__((constructor))),其中包含ObjectClass和Object的初始函数。为什么我们需要这种机制?换句话说,如果我们只创建ObjectClass 而不是创建TypeImpl 然后再创建ObjectClass 会怎样?有什么优势吗?
【问题讨论】: