zoukankan      html  css  js  c++  java
  • php基本变量

    结构体和联合体

    • struct(结构体) 和 union(联合体)
    • 结构体是8字节对齐,不够8字节的部分则空出来;
    • 联合体共用一个8字节,共享这8字节的内存,后使用的会覆盖先使用的
    • 结构体和联合体在形式上是相似的

    • 宏 在C语言可以理解为替换,类似PHP中的常量

    大小端

    • 根据机器的不同,大小端会有区别,PHP中对大小端的机器都做了兼容
     0x12345678    
    内存 低地址 ——> 高地址
    大端:0x12   34   56   78     (高位存在低地址)
    小端:0x78   56   34   12     (高位存在高地址)    大多数是小端的机器
    
    
    • PHP中变量是由_zval_struct结构体实现的,其构成如下
    struct _zval_struct {
        zend_value        value;            /* value */
        union {
            struct {
                ZEND_ENDIAN_LOHI_4(
                    zend_uchar    type,            /* active type */
                    zend_uchar    type_flags,
                    zend_uchar    const_flags,
                    zend_uchar    reserved)        /* call info for EX(This) */
            } v;
            uint32_t type_info;
        } u1;
        union {
            uint32_t     next;                 /* hash collision chain */
            uint32_t     cache_slot;           /* literal cache slot */
            uint32_t     lineno;               /* line number (for ast nodes) */
            uint32_t     num_args;             /* arguments number for EX(This) */
            uint32_t     fe_pos;               /* foreach position */
            uint32_t     fe_iter_idx;          /* foreach iterator index */
            uint32_t     access_flags;         /* class constant access flags */
            uint32_t     property_guard;       /* single property guard */
            uint32_t     extra;                /* not further specified */
        } u2;
    };
    
    

    联合体:value 用来存放变量的值,是一个叫做zend_value的联合体
    联合体:u1 标明变量的属性
    联合体:u2 标明变量被使用的情况

    变量的值实际存储在zend_value的联合体中,也就是value联合体, 联合体比结构体要节省很多空间。

    typedef union _zend_value {
        zend_long         lval;                /* long value */
        double            dval;                /* double value */
        zend_refcounted  *counted;
        zend_string      *str;
        zend_array       *arr;
        zend_object      *obj;
        zend_resource    *res;
        zend_reference   *ref;
        zend_ast_ref     *ast;
        zval             *zv;
        void             *ptr;
        zend_class_entry *ce;
        zend_function    *func;
        struct {
            uint32_t w1;
            uint32_t w2;
        } ww;
    } zend_value;
    
  • 相关阅读:
    关于通胀,交易手续费和加密货币的货币政策
    私有链和联盟链的机会与挑战
    耶鲁大学公开课:博弈论第九节(笔记)
    区块链匿名技术
    区块链对比数据库
    硬盘 分区 格式化 和挂载
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
  • 原文地址:https://www.cnblogs.com/lz0925/p/11119757.html
Copyright © 2011-2022 走看看