1. 程式人生 > >PHP內核之旅-4.可變長度的字符串

PHP內核之旅-4.可變長度的字符串

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 */
5
size_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.可變長度的字符串