久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

徹底搞懂PHP 變量結(jié)構(gòu)體

這篇文章主要介紹了PHP 變量結(jié)構(gòu)體的相關(guān)知識,文中提到了PHP5中的 zval和PHP 7 中的 zval,代碼簡單易懂,需要的朋友可以參考下

PHP5 中的 zval

// 1. zval
typedef struct _zval_struct {
 zvalue_value value;
 zend_uint refcount__gc;
 zend_uchar type;
 zend_uchar is_ref__gc;
} zval;
// 2. zvalue_value
typedef union _zvalue_value {
 long lval;  // 用于 bool 類型、整型和資源類型
 double dval; // 用于浮點類型
 struct {  // 用于字符串
  char *val;
  int len;
 } str;
 HashTable *ht; // 用于數(shù)組
 zend_object_value obj; // 用于對象
 zend_ast *ast; // 用于常量表達式(PHP5.6 才有)
} zvalue_value;
// 3. zend_object_value
typedef struct _zend_object_value {
 zend_object_handle handle;
 const zend_object_handlers *handlers;
} zend_object_value;
// 4. zend_object_handle
typedef unsigned int zend_object_handle;

多數(shù)文章,在提到PHP5 變量結(jié)構(gòu)體的時候,都提到:sizeof(zval) == 24, sizeof(zvalue_value) == 16,實際上這個論述并不準確,在 CPU 為 64bit 時,這個結(jié)果是正確的。

但當 CPU 為32bit 時: sizeof(zval) == 16, sizeof(zvalue_value) == 8,主要因為 CPU 為 64bit 時,指針占用8個字節(jié),而 32bit時,指針為4個字節(jié)。

PHP 7 中的 zval

// 1. zval
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 */
 } u2;
};
// 2. zend_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;

PHP 7的看似很多,但其實更簡單了,不論 CPU 是32bit 還是 64bit,sizeof(zval) 永遠都是等于 16。
主要看 zend_value 中的 ww,是兩個 uint32_t,這個永遠是 8 個字節(jié),所以 sizeof(zend_value) == 8,因此 sizeof(zval) == 16。

所以 PHP7 新特性提到的節(jié)省內(nèi)存這點上,在 32bit 系統(tǒng)中,PHP5 => PHP7 并無變化。

順便說下 sizeof,不能當做函數(shù),雖然寫法像函數(shù),這個數(shù)值會在編譯期就確定好,非運行期。類似編譯預(yù)處理。

總結(jié)

以上所述是小編給大家介紹的PHP 變量結(jié)構(gòu)體,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對網(wǎng)站的支持!

【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實例形式分析了php實現(xiàn)針對有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現(xiàn)APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現(xiàn)的多維數(shù)組排序算法,結(jié)合實例形式對比分析了php針對多維數(shù)組及帶有鍵名的多維數(shù)組進行排序相關(guān)操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結(jié)合ajaxuploadfile實現(xiàn)無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發(fā)接口使用RSA進行加密解密方法,對此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 在线欧美小视频 | 久久久久久久av麻豆果冻 | 日韩午夜精品 | 精品福利视频一区二区三区 | 国产精品美女久久久久久免费 | 天天夜夜操 | 精品国产亚洲一区二区三区大结局 | 日韩欧美三区 | 亚洲精品在线免费观看视频 | 免费h视频 | 欧美一区中文字幕 | 午夜影院在线观看 | 亚洲精品性视频 | 国产成人久久精品一区二区三区 | 欧美精品在线看 | 国产精品www | 免费看色 | 国产精品免费观看 | 一区二区三区四区在线免费观看 | 久久这里有精品 | 亚洲在线一区二区 | 在线91 | 99热99| 久久中文网 | 日韩日韩日韩日韩日韩日韩日韩 | 亚洲精品久久区二区三区蜜桃臀 | 成年人在线视频 | 国产精品视频一区二区三 | 国产午夜影院 | 黄色日本片 | 久久91精品国产一区二区三区 | 国产精品免费看 | 亚洲第一成人影院 | 一区二区中文字幕 | 亚洲福利一区 | 精品乱码一区二区三四区视频 | 免费性视频 | 99热最新网址 | 91麻豆产精品久久久久久 | 亚洲97| 国产精久久久久久久妇剪断 |