PHP7.0性能优化-学习笔记2
下一篇: PHP7.0性能优化-学习笔记3
相关推荐:
1.PHP7 NULL 合并运算符
2.PHP7 太空船运算符(组合比较符<=>)
3.PHP7 常量数组
4.PHP7 匿名类
更多:PHP7新特性教程
优化一:zval使用栈内存
在zend引擎和拓展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存,然后为这块内存赋值。而PHP7可以直接使用栈内存。
在PHP5中: zval *val;MAKE_STD_ZVAL(val);
上面代码的含义是先申请一个zval指针名为val,然后动态创建一个内存并用val这个声明好的指针指向这块内存块。
在PHP7中: zval val;
上面代码的含义是:在栈上预分配一块内存来存放PHP变量。这样的好处是减少了多次内存分配的管理和操作,因为在php程序中一般会有大量的变量存在。
优化二:zend_string存储hash值,array查询不再需要重复计算hash表中的key
在php中,数组查询用的非常之频繁。在数组查询值的时候,这个key的值每次都要经过一次转换转成hash值,这是要经过复杂的计算过程的。而且,在php底层,不仅在数组这里有使用到hash转换,还包括类的属性和类的函数,都有用到hash转换。因此,cpu就要花费大量的时间去计算hash值。然而,在我们的程序中,比如数组中这些key的值又经常是不变的,但是每次用到都要重复的去计算。
于是,在PHP7中干脆将这个hash值保存起来,避免后面要用到仍然重复去计算。PHP7为字符串单独创建了新类型叫做zend_string,除了char*指针和长度之外,还增加一个hash字段,用于保存字符串的hash值。因此数组键值查找时不需要反复去计算hash值。可以看下定义的结构体代码:
struct _zend_string { zend_refcounted gc; zend_ulong h; size_t len; char val[1] };
结构体的变量h就是用来存放计算过的hash值。
欢迎转载,转载请注明出处:http://coderschool.cn/296.html
下一篇: PHP7.0性能优化-学习笔记3
6 Comments
博主,你好,boke112导航(博客导航站)特来拜会,发现贵站不错,已将贵站收录到博客导航的建站技术类,如有异议请留言哦!谢谢!PS:由于找不到贵站的留言板,所以就在此留言告知了,如造成困扰可删除本条评论,谢谢!
谢谢。
很不错的网站,同道中人。必须支持。网站已收藏。以后会常来。也欢迎博主互访互评,一起学习,一起交流,一起成长。没看到可点广告,不然可以帮忙点点广告。
谢谢,我也会常去拜访。
真心的在我的网站到你的网站第一次是跳不过来的!要刷新一下才能显示
谢谢提醒,我查下原因。