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

站长检测工具四位一体网站开发

站长检测工具,四位一体网站开发,如何开展网络营销推广,博客类网站源码接前一篇文章#xff1a;QEMU源码全解析14 —— QOM介绍#xff08;3#xff09; 本文内容参考#xff1a; 《趣谈Linux操作系统》 —— 刘超#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强#xff0c;机械工业出版社 特此致谢#xff01; 上一回讲到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.w-s-a.com/news/360116/

相关文章:

  • microsoft免费网站网站后台登陆路径
  • 贵州住房和城乡建设局网站做网站排名费用多少钱
  • 现在个人做网站还能盈利吗xampp用wordpress
  • 做网站 租服务器温岭建设公司网站
  • 四川住房和城乡建设厅网站官网做网站最贵
  • 右玉网站建设四川林峰脉建设工程有限公司网站
  • 网站推广小助手杭州百度百家号seo优化排名
  • 怎么做网站搜索框搜索网站备案拍照背景幕布
  • 建设部网站城市规划资质标准伊春网络推广
  • 如何设计酒店网站建设深圳市房地产信息系统平台
  • 伍佰亿网站怎么样网站建设前台后台设计
  • 做整装的网站北京哪个网站制作公司
  • 建设赚钱的网站福州便民生活网
  • 咸阳网站设计建设公司小程序打包成app
  • 做视频网站视频文件都存放在哪做旅游宣传图的网站有哪些
  • 地方门户类网站产品推广惠州市中国建设银行网站
  • 网站建设公司推荐5788移动版wordpress
  • 产品类型 速成网站淘宝怎么建立自己的网站
  • 南京优化网站建设公司的网站怎么建设
  • 做网站开发能挣钱月嫂云商城网站建设
  • 包装网站模板新手入门网站建设
  • 做网站的天津哪个公司做网站
  • 网站建设摊销时间是多久微信官网免费下载安装
  • 网站解析是做a记录吗群晖 wordpress 阿里云
  • 涉县移动网站建设公司常州做网站的公司有哪些
  • 网站批量创建程序中国十大人力资源公司
  • 菏泽网站建设 梧桐树二次开发创造作用
  • 维护网站费用长沙广告设计公司排名
  • 模仿别人网站侵权wordpress 修改链接失效
  • wordpress文章设置受密码保护南宁网站优化公司哪家好