PHP內核之旅-4.可變長度的字符串
阿新 • • 發佈:2018-05-16
mage nbsp 字符串結束 val ffffff 分享 not span typedef
PHP 內核之旅系列
PHP內核之旅-1.生命周期
PHP內核之旅-2.SAPI中的Cli
PHP內核之旅-3.變量
PHP內核之旅-4.字符串
一、字符串源碼
zend_string
1 typedef struct _zend_string zend_string; //定義 zend_string變量 2 struct _zend_string { //_zend_string結構體 3 zend_refcounted_h gc; 4 zend_ulong h; /* hash value */ 5size_t len; 6 char val[1]; 7 };
變量 | 描述 | |
1 |
gc
|
變量的引用計數信息,內存管理會用到 |
2 |
h |
harh code, 字符串通過Times33算法計算得到的 |
3 |
len
|
字符串的長度 |
4 |
val[1] |
字符串的內容 |
二、字符串結構
註意:
1. zend_string = 引用計數 + 字符串hash code + 字符串長度 + 字符串內容。
2. 字符串val是一個可變數組,val[1]表示默認存放‘\0‘ 字符串結束符。
3. val[0]存放空字符串。當字符串不為空時,val[0 ~ len]存放的是字符串內容。val[len+1] = ‘0\‘
比如‘test‘字符串是這樣存放的:
val[0] = ‘t‘
val[1] = ‘e‘
val[2] = ‘s‘
val[3] = ‘t‘
val[4] = ‘\0‘ 字符串結束符
PHP內核之旅-4.可變長度的字符串