字符串管理:zend_string
任何程序都需要管理字符串。在這里,我們將詳細(xì)介紹適合 PHP 需求的自定義解決方案:zend_string
。每次 PHP 需要使用字符串時(shí),都會(huì)使用 zend_string
結(jié)構(gòu)。該結(jié)構(gòu)僅僅是 C 語言的 char *
字符串類型的簡單精簡包裝。
它添加了內(nèi)存管理的功能,所以同一字符串可以在多個(gè)地方共享,而無需重復(fù)。另外,一些字符串是“內(nèi)部的”,即“持久的”分配,并通過內(nèi)存管理特殊管理,以便它們不會(huì)在多個(gè)請求中被銷毀。之后,那些從Zend 內(nèi)存管理獲得永久分配。
相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通
結(jié)構(gòu)和訪問宏
這里是簡單的zend_string
結(jié)構(gòu):
struct _zend_string { zend_refcounted_h gc; zend_ulong h; size_t len; char val[1]; };
如你所見,該結(jié)構(gòu)嵌入了一個(gè) zend_refcounted_h
標(biāo)頭。這個(gè)是內(nèi)存管理和引用需要用到的。 由于該字符串很有可能作為哈希表檢查的關(guān)鍵字,因此它在 h
字段中嵌入了其哈希值。這是無符號長整型 zend_ulong
。僅在需要對 zend_string
進(jìn)行哈希處理時(shí)會(huì)用到,特別是和哈希表:zend_array一起用時(shí)。這很有可能。
如你所知,字符串知道其長度為 len
字段,以支持“二進(jìn)制字符串。二進(jìn)制字符串是嵌入一個(gè)或多個(gè) NUL
字符(