zoukankan      html  css  js  c++  java
  • php7新特新

    1.变量类型
    php7版本函数的参数和返回值增加了类型限定。为什么php要加入类型限定,实际上此项特性是为了php7.1版本的JIT特性做准备,增加类型后php JIT可以准确判断变量类型,生成最佳的机器指令。
    function test(int $a, string $b, array $c) : int {
    }

    2.错误异常
    php程序出错hou过去Zend引擎会发生致命错误并终止程序运行,php7可以使用try/catch捕获错误。
    try {
    non_exists_func();
    } catch (EngineException $e){
    echo "Exception:{$e->getMessage()} "
    }

    3.zval使用栈内存
    在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。而PHP7直接使用栈内存。
    PHP5
    zval *val;MAKE_STD_ZVAL(val);
    PHP7
    zval val;
    [优点:节省了一次内存分配]

    4.Zend_string存储hash值,array查询不再需要重复计算hash
    PHP7为字符串单独创建了新类型叫做zend_string,除了char*指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。数组键值查找不需要反复计算hash值。
    struct _zend_string{
    zend_refcounted gc;
    zend_ulong h;
    size_t len;
    char val[1]
    };

    5.hashtable桶内直接放数据,减少了内存的申请次数,提升了Cache命中率和内存访问速度
    zend_parse_parameters改为宏实现,性能提升5%
    新增4种OPCODE,call_user_function,is_int/string/array,strlen,defined 4个函数变成了OpCode指令,速度更快
    其他更多性能优化,如基础类型int,float,bool等改为直接进行值拷贝,排序算法改进,PCRE with JIT,execute_data和opline使用全局寄存器,使用gdb4.8的PGO功能

    PHP7 JIT
    php7.0-final版本不会携带JIT特性
    JIT是just in time的缩写,表示运行时将指令转化为二进制机器码。
    对于计算密集型的程序,JIT可以将PHP的OpCode直接转换为机器码,大幅提升性能
    PHP开发组已重启JIT开发计划,预计PHP7.1版本会带有JIT特性

  • 相关阅读:
    暑假第三周
    暑假第二周
    bzoj3572:[Hnoi2014]世界树
    bzoj3998:[TJOI2015]弦论
    luoguP4242树上的毒瘤
    bzoj1339/1163:[Baltic2008]Mafia
    bzoj3507:[Cqoi2014]通配符匹配
    bzoj1449:[JSOI2009]球队收益/bzoj2895:球队预算
    bzoj2243:[SDOI2011]染色
    bzoj4516:[Sdoi2016]生成魔咒
  • 原文地址:https://www.cnblogs.com/zhirusi/p/12014173.html
Copyright © 2011-2022 走看看