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