濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 徹底搞懂PHP 變量結(jié)構(gòu)體

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

熱門(mén)標(biāo)簽:施工地圖標(biāo)注怎么做 百度地圖標(biāo)注名編輯 怎么在高德地圖標(biāo)注行走軌跡 個(gè)性化地圖標(biāo)注在線(xiàn) 清遠(yuǎn)陽(yáng)山400電話(huà)號(hào)碼如何申請(qǐng) 襄陽(yáng)房產(chǎn)電銷(xiāo)機(jī)器人招商 深圳400電話(huà)辦理那家好 安徽移動(dòng)外呼系統(tǒng) 百度地圖標(biāo)注飯店位置怎么

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 類(lèi)型、整型和資源類(lèi)型
 double dval; // 用于浮點(diǎn)類(lèi)型
 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ù),雖然寫(xiě)法像函數(shù),這個(gè)數(shù)值會(huì)在編譯期就確定好,非運(yùn)行期。類(lèi)似編譯預(yù)處理。

總結(jié)

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

您可能感興趣的文章:
  • C語(yǔ)言結(jié)構(gòu)體數(shù)組同時(shí)賦值的另類(lèi)用法
  • 解析C語(yǔ)言結(jié)構(gòu)體及位段
  • 深度剖析C語(yǔ)言結(jié)構(gòu)體
  • C語(yǔ)言中結(jié)構(gòu)體變量私有化詳解
  • C語(yǔ)言使用結(jié)構(gòu)體實(shí)現(xiàn)簡(jiǎn)單通訊錄
  • C語(yǔ)言利用結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
  • C語(yǔ)言結(jié)構(gòu)體定義的方法匯總
  • C++結(jié)構(gòu)體struct和類(lèi)class區(qū)別詳解
  • C#中結(jié)構(gòu)體定義并轉(zhuǎn)換字節(jié)數(shù)組詳解
  • C++中對(duì)C語(yǔ)言結(jié)構(gòu)體用法的擴(kuò)充

標(biāo)簽:阜陽(yáng) 南昌 延邊 欽州 中衛(wèi) 駐馬店 黑河 臨夏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《徹底搞懂PHP 變量結(jié)構(gòu)體》,本文關(guān)鍵詞  徹底,搞懂,PHP,變量,結(jié)構(gòu),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《徹底搞懂PHP 變量結(jié)構(gòu)體》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于徹底搞懂PHP 變量結(jié)構(gòu)體的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    赞皇县| 平顺县| 东阿县| 瑞昌市| 澳门| 峡江县| 佛坪县| 越西县| 宝应县| 蓬莱市| 揭西县| 吉林省| 白银市| 宕昌县| 道孚县| 绥德县| 栖霞市| 红河县| 长春市| 涞水县| 延庆县| 西贡区| 长子县| 怀化市| 松原市| 德安县| 嫩江县| 富顺县| 曲松县| 宿州市| 铜陵市| 如皋市| 天门市| 张北县| 偏关县| 湖南省| 诸暨市| 无锡市| 江北区| 太保市| 兴隆县|