欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年10月11日 14:13:05   作者:翠竹傲骨  
這篇文章主要介紹了PHP 變量結(jié)構(gòu)體的相關(guān)知識(shí),文中提到了PHP5中的 zval和PHP 7 中的 zval,代碼簡(jiǎn)單易懂,需要的朋友可以參考下

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; // 用于浮點(diǎn)類型
 struct {  // 用于字符串
  char *val;
  int len;
 } str;
 HashTable *ht; // 用于數(shù)組
 zend_object_value obj; // 用于對(duì)象
 zend_ast *ast; // 用于常量表達(dá)式(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)體的時(shí)候,都提到:sizeof(zval) == 24, sizeof(zvalue_value) == 16,實(shí)際上這個(gè)論述并不準(zhǔn)確,在 CPU 為 64bit 時(shí),這個(gè)結(jié)果是正確的。

但當(dāng) CPU 為32bit 時(shí): sizeof(zval) == 16, sizeof(zvalue_value) == 8,主要因?yàn)?CPU 為 64bit 時(shí),指針占用8個(gè)字節(jié),而 32bit時(shí),指針為4個(gè)字節(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的看似很多,但其實(shí)更簡(jiǎn)單了,不論 CPU 是32bit 還是 64bit,sizeof(zval) 永遠(yuǎn)都是等于 16。
主要看 zend_value 中的 ww,是兩個(gè) uint32_t,這個(gè)永遠(yuǎn)是 8 個(gè)字節(jié),所以 sizeof(zend_value) == 8,因此 sizeof(zval) == 16。

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

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

總結(jié)

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

相關(guān)文章

  • PHP圖片水印類的封裝

    PHP圖片水印類的封裝

    這篇文章主要為大家詳細(xì)介紹了PHP圖片水印類的封裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用案例詳解

    PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用案例詳解

    這篇文章主要介紹了PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用,結(jié)合具體案例形式詳細(xì)分析了PHP觀察者模式的相關(guān)概念、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • PHP中使用FFMPEG獲取視頻縮略圖和視頻總時(shí)長(zhǎng)實(shí)例

    PHP中使用FFMPEG獲取視頻縮略圖和視頻總時(shí)長(zhǎng)實(shí)例

    這篇文章主要介紹了PHP中使用FFMPEG獲取視頻縮略圖和視頻總時(shí)長(zhǎng)實(shí)例,需要的朋友可以參考下
    2014-05-05
  • php 根據(jù)URL下載遠(yuǎn)程圖片、壓縮包、pdf等文件到本地

    php 根據(jù)URL下載遠(yuǎn)程圖片、壓縮包、pdf等文件到本地

    這篇文章主要介紹了php 根據(jù)URL下載遠(yuǎn)程圖片、壓縮包、pdf等文件到本地 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Laravel如何實(shí)現(xiàn)自動(dòng)加載類

    Laravel如何實(shí)現(xiàn)自動(dòng)加載類

    今天小編就為大家整理了一篇Laravel如何實(shí)現(xiàn)自動(dòng)加載類的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • ThinkPHP 6 添加跳轉(zhuǎn)提示擴(kuò)展 liliuwei/thinkphp-jump的操作方法

    ThinkPHP 6 添加跳轉(zhuǎn)提示擴(kuò)展 liliuwei/thinkphp-jump的操作

    liliuwei/thinkphp-jump 是 TP5 中經(jīng)典跳轉(zhuǎn)提示,在 TP6 中已經(jīng)取消,通過(guò) composer 下載該擴(kuò)展可以在 TP6 中使用 TP5 的跳轉(zhuǎn)提示操作,這篇文章主要介紹了ThinkPHP 6 添加跳轉(zhuǎn)提示擴(kuò)展 liliuwei/thinkphp-jump,需要的朋友可以參考下
    2023-08-08
  • PHP連接MYSQL數(shù)據(jù)庫(kù)實(shí)例代碼

    PHP連接MYSQL數(shù)據(jù)庫(kù)實(shí)例代碼

    現(xiàn)在做的項(xiàng)目需要php連接mysql數(shù)據(jù)庫(kù),雖然之前學(xué)過(guò),但是現(xiàn)在基本上都給忘了,之后通過(guò)查找相關(guān)資料找到了解決方法,下面小編把具體方法分享在腳本之家平臺(tái)供大家學(xué)習(xí)
    2016-01-01
  • Smarty中調(diào)用FCKeditor的方法

    Smarty中調(diào)用FCKeditor的方法

    這篇文章主要介紹了Smarty中調(diào)用FCKeditor的方法,對(duì)比常見(jiàn)的錯(cuò)誤方法講述了Smarty中調(diào)用FCKeditor的實(shí)現(xiàn)過(guò)程,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • Laravel框架源碼解析之模型Model原理與用法解析

    Laravel框架源碼解析之模型Model原理與用法解析

    這篇文章主要介紹了Laravel框架源碼解析之模型Model,結(jié)合實(shí)例形式分析了Laravel框架模型Model相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼

    Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼

    今天小編就為大家分享一篇Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10

最新評(píng)論