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

南宁设计网站建设国外比较开放的浏览器

南宁设计网站建设,国外比较开放的浏览器,工作室网站域名,wordpress英文源码昨天和一朋友在邮件中讨论这样一个问题#xff1a;zend_internal_function#xff0c;zend_function#xff0c;zend_op_array这三种结构是可以相互转化的#xff0c;这三者的转化是如何进行的呢#xff1f; 以此文#xff0c;总结。在函数调用的执行代码中我们会看到这样…昨天和一朋友在邮件中讨论这样一个问题zend_internal_functionzend_functionzend_op_array这三种结构是可以相互转化的这三者的转化是如何进行的呢 以此文总结。在函数调用的执行代码中我们会看到这样一些强制转换EX(function_state).function (zend_function *) op_array;或者EG(active_op_array) (zend_op_array *) EX(function_state).function;这种不同结构间的强制转换是如何进行的呢首先我们来看zend_function的结构在Zend/zend_compile.h文件中其定义如下typedef union _zend_function {zend_uchar type; /* MUST be the first element of this struct! */struct {zend_uchar type; /* never used */char *function_name;zend_class_entry *scope;zend_uint fn_flags;union _zend_function *prototype;zend_uint num_args;zend_uint required_num_args;zend_arg_info *arg_info;zend_bool pass_rest_by_reference;unsigned char return_reference;} common;zend_op_array op_array;zend_internal_function internal_function;} zend_function;这是一个联合体我们来温习一下联合体的一些特性。 联合体的所有成员变量共享内存中的一块内存在某个时刻只能有一个成员使用这块内存 并且当使用某一个成员时其仅能按照它的类型和内存大小修改对应的内存空间。 我们来看看一个例子#include #include int main() {typedef union _utype{int i;char ch[2];} utype;utype a;a.i 10;a.ch[0] 1;a.ch[1] 1;printf(a.i %d a.ch%s,a.i, a.ch);getchar();return (EXIT_SUCCESS);}程序输出a.i 12593 a.ch11 当修改ch的值时它会依据自己的规则覆盖i字段对应的内存空间。 ’1′对应的ASCII码值是49二进制为00110001当ch字段的两个元素都为’1′时此时内存中存储的二进制为 00110001 00110001 转成十进制其值为12593。回过头来看zend_function的结构它也是一个联合体第一个字段为type 在common中第一个字段也为type并且其后面注释为/* Never used*/此处的type字段的作用就是为第一个字段的type留下内存空间。并且不让其它字段干扰了第一个字段。 我们再看zend_op_array的结构struct _zend_op_array {/* Common elements */zend_uchar type;char *function_name;zend_class_entry *scope;zend_uint fn_flags;union _zend_function *prototype;zend_uint num_args;zend_uint required_num_args;zend_arg_info *arg_info;zend_bool pass_rest_by_reference;unsigned char return_reference;/* END of common elements */zend_bool done_pass_two;....// 其它字段}这里的字段集和common的一样于是在将zend_function转化成zend_op_array时并不会产生影响这种转变是双向的。再看zend_internal_function的结构typedef struct _zend_internal_function {/* Common elements */zend_uchar type;char * function_name;zend_class_entry *scope;zend_uint fn_flags;union _zend_function *prototype;zend_uint num_args;zend_uint required_num_args;zend_arg_info *arg_info;zend_bool pass_rest_by_reference;unsigned char return_reference;/* END of common elements */void (*handler)(INTERNAL_FUNCTION_PARAMETERS);struct _zend_module_entry *module;} zend_internal_function;同样存在公共元素和common结构体一样我们可以将zend_function结构强制转化成zend_internal_function结构并且这种转变是双向的。总的来说zend_internal_functionzend_functionzend_op_array这三种结构在一定程序上存在公共的元素 于是这些元素以联合体的形式共享内存并且在执行过程中对于一个函数这三种结构对应的字段在值上都是一样的 于是可以在一些结构间发生完美的强制类型转换。 可以转换的列表如下zend_function可以与zend_op_array互换zend_function可以与zend_internal_function互换但是一个zend_op_array结构转换成zend_function是不能再次转变成zend_internal_function结构的反之亦然。其实zend_function就是一个混合的数据结构这种结构在一定程序上节省了内存空间。
http://www.pierceye.com/news/689566/

相关文章:

  • 十堰网站开发培训编程软件手机
  • 南京网站优化推广微网站缺点
  • 大连零基础网站建设培训哪里有固安县建设局网站
  • 怎么制作网站首页培训心得体会总结简短
  • 商务网站建设 模板长春高端品牌网站建设
  • 做网站比较便宜办公资源网
  • 公司怎么做网页网站遵义网站设计公司
  • 网站建设毕业设计yy直播回放
  • 响应式网站有哪些2017淮南网络推广报价
  • 兰州公司网站建设网站建设筹备方案
  • 租房网站建设做一个跨境电商网站
  • 网站设计制作过程容桂做pc端网站
  • 宜昌市上海中学官网seo文章外包
  • 加强普法网站建设的通知制作婚恋网站
  • 北大荒建设集团有限公司网站网站添加在线qq聊天
  • 网站首页被k咋办上海市企业服务云登录
  • 长安镇网站建设公司大网站制作公司
  • 衡水做网站推广找谁廊坊百度推广排名优化
  • 网站建设毕业报告wordpress微信登录页面
  • 外包网站建设费用包括网站备份crm系统有哪些
  • 高端网站设计推广v信haotg8wordpress 付费后查看
  • cms管理手机网站长春做网站好的公司
  • 可信网站认证 技术支持单位沈阳又一烂尾项目复工
  • 南昌网站建设培训学校做幼儿网站的目标
  • 装饰网站建设的背景怎么做原创动漫视频网站
  • 电脑购物网站模板c2c商城网站建设二次开发
  • 自建站有哪些dz论坛网站源码
  • 湖南湘源建设工程有限公司网站牛商网网站做seo好么
  • 郑州网站制作建设南宁网站设计要多少钱
  • 网站地图制作怎么做云南建设网