当前位置: 首页 > news >正文

河北建设厅官方网站wordpress设置404

河北建设厅官方网站,wordpress设置404,新会住房和城乡建设部网站,wordpress管理界面接前一篇文章:QEMU源码全解析14 —— QOM介绍(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上一回讲到pci…

接前一篇文章:QEMU源码全解析14 —— QOM介绍(3)

本文内容参考:

《趣谈Linux操作系统》 —— 刘超,极客时间

《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社

特此致谢!

上一回讲到pci_edu_register_types函数,本回接着往下深入分析,并且完成对QOM第一部分——类型的注册的解析。qom/object.c

为了便于理解,再次贴出pci_edu_register_types函数代码,在在hw/misc/edu.c中,如下:

static void pci_edu_register_types(void)
{static InterfaceInfo interfaces[] = {{ INTERFACE_CONVENTIONAL_PCI_DEVICE },{ },};static const TypeInfo edu_info = {.name          = TYPE_PCI_EDU_DEVICE,.parent        = TYPE_PCI_DEVICE,.instance_size = sizeof(EduState),.instance_init = edu_instance_init,.class_init    = edu_class_init,.interfaces = interfaces,};type_register_static(&edu_info);
}
type_init(pci_edu_register_types)

pci_edu_register_types函数唯一的工作是构造了一个TypeInfo类型的edu_info,并将其作为参数调用了type_register_static。实际上在之前回目中已经对于type_register_static函数进行过详细分析,可以参看:QEMU源码全解析10 —— 定义一个QEMU模块(2)。还是那句话,这里才从QOM的角度再次讲解一下,权当是加深理解了。

type_register_static函数调用type_register函数,最终到达type_register_internal函数,核心工作在此函数中进行(可以参阅:QEMU源码全解析11 —— 定义一个QEMU模块(3))。

以上几个函数都是在qom/object.c中,代码如下:

static TypeImpl *type_register_internal(const TypeInfo *info)
{TypeImpl *ti;ti = type_new(info);type_table_add(ti);return ti;
}TypeImpl *type_register(const TypeInfo *info)
{assert(info->parent);return type_register_internal(info);
}TypeImpl *type_register_static(const TypeInfo *info)
{return type_register(info);
}

可见,这几个函数是按照调用关系一个在一个上边。

type_register_internal函数的参数TypeInfo表示的是类型信息。其中的parent成员表示的是父类型的名字;inistance_size和instance_init成员分别表示该类型对应的实例大小以及实例的初始化函数;class_init成员表示该类型的类初始化函数。

type_register_internal函数很简单,type_new函数首先通过一个TypeInfo结构构造出一个TypeImpl,然后通过type_table_add函数将这个TypeImpl加入到一个哈希表中。此哈希表的key是TypeImpl的名字,value为TypeImpl本身的值。这一过程完成了从TypeInfo到TypeImpl的转变,并且将其插入到了一个哈希表中。TypeImpl的数据基本上都是从TypeInfo复制过来的,表示的是一个类型的基本信息。

在C++、Java中,可以使用class关键字定义一个类型。QEMU使用C语言实现面向对象时,也必须保存对象的类型信息。因此,在TypeInfo里面指定了类型的基本信息,然后在初始化的时候复制到TypeImpl的哈希表中。

TypeImpl中存放了类型的所有信息,其定义如下(qom/object.c中):

typedef struct InterfaceImpl InterfaceImpl;
typedef struct TypeImpl TypeImpl;struct InterfaceImpl
{const char *typename;
};struct TypeImpl
{const char *name;size_t class_size;size_t instance_size;size_t instance_align;void (*class_init)(ObjectClass *klass, void *data);void (*class_base_init)(ObjectClass *klass, void *data);void *class_data;void (*instance_init)(Object *obj);void (*instance_post_init)(Object *obj);void (*instance_finalize)(Object *obj);bool abstract;const char *parent;TypeImpl *parent_type;ObjectClass *class;int num_interfaces;InterfaceImpl interfaces[MAX_INTERFACES];
};

下面对TypeImpl结构中的成员进行基本介绍:

  • name —— 表示类型的名字,如"edu"、"isa-i8259"等。
  • class_size —— 表示所属类的大小。
  • instance_size —— 表示该类实例的大小。
  • class_init、class_base_init —— 函数指针,表示类的初始化函数。这类函数只会在类初始化的时候进行调用。
  • instance_init、instance_post_init、instance_finalize:函数指针,表示该类所属实例相关的初始化与销毁函数。
  • abstract —— 表示类型是否是抽象的,与C++中的abstract类型相似,抽象类型不能直接创建实例,只能创建其子类所属实例。
  • parent —— 表示父类型的名字。
  • parent_type —— 表示父类型对应的类型信息。这是一个TypeImpl。
  • class —— 是一个指向ObjectClass的指针,保存了该类型的基本信息。
  • num_interfaces —— 表示接口数量。
  • interfaces —— 描述类型的接口信息。与Java语言中的接口类似,接口是一种特殊的抽象类型。

至此,QOM的第一部分 —— 类型的注册就介绍完了。

http://www.yayakq.cn/news/278660/

相关文章:

  • 做图书网站的代码南昌做seo的公司
  • 成都网站建设与推广网络营销型网站设计
  • 网站建设方法有那几种wordpress设置登录页面
  • 苏州建设网站服务wordpress下载安卓版
  • 网站开发课程设计实验报告wordpress文章
  • 网站建设 工作建议wordpress页面批量生成二维码
  • 网站图片加载 优化wordpress设置icon
  • 沙漠风网站建设怎么样上海设计网站
  • 衡水哪里可以做网站wordpress 菜单 标题属性
  • 如何做色流量网站单页面网站制作
  • 网站怎么注销备案号电话销售怎么做 网站
  • 未来做那个网站能致富网站建设培训 ppt
  • 南昌做公司网站wordpress加图片不显示
  • 什么不属于网站推广软件怎么在外管局的网站做延期
  • 免费高清视频素材网站企业网站建设目的意义
  • 青岛网站建设企业沧州讯呗网络科技有限公司
  • wordpress教材安徽seo推广公司
  • 南京网站优化技术百度搜索引擎网址格式
  • 网站运营意义百度推广效果怎样一天费用
  • 护肤网站的功能设计陕西电商网站建设
  • 行业门户网站是什么如何做自己的业务网站
  • 外网访问不了内网建设的网站驻马店高端网站建设
  • 广州建站公司网站电商网站建设分析
  • 做动态文字的网站WordPress无法提交评论
  • 网站开发用哪个软件好北京二次感染最新消息
  • 昆明汽车建站网站模板科技有限公司的经营范围
  • 垣曲做网站怎么做网站图片链接
  • 门户网站的意义深圳最乱最穷的地方
  • 雅虎做网站推广自己做文字壁纸的网站
  • 网站的最近浏览 怎么做公司注册网上核名app