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

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

PHP 核心之旅系列

一、字串原始碼

 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'  字串結束符

參考資料:

http://www.php-internals.com/

PHP7核心剖析


作  者:
出  處:http://www.cnblogs.com/jackson0714/
關於作者:專注於微軟平臺的專案開發。如有問題或建議,請多多賜教!
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者

直接私信
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!

相關推薦

PHP核心-4.可變長度字串

PHP 核心之旅系列 一、字串原始碼  zend_string 1 typedef struct _zend_string zend_string; //定義 zend_string變數 2 struct _zend_string { //_zend_string結構體 3

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

mage nbsp 字符串結束 val ffffff 分享 not span typedef PHP 內核之旅系列 PHP內核之旅-1.生命周期 PHP內核之旅-2.SAPI中的Cli PHP內核之旅-3.變量 PHP內核之旅-4.字符串 一、字符串源碼

PHP核心-5.強大的陣列

PHP 核心之旅系列 一、陣列的內部結構 1.底層實現為散列表(HashTable,也稱作雜湊表) 2.散列表的概念: 是根據關鍵碼值(Key value)而直接進行訪問的資料結構。通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表

PHP核心-3.變數

PHP 核心之旅系列 一、弱型別語言 php是弱型別語言。一個變數可以表示任意資料型別。 php強大的一部分原因就是因為它是弱型別語言,但是弱型別語言也有它的缺點,使用不當也會造成很大的問題。 定義變數的時候不需要指定變數型別,也不需要初始化變數。 //定義變數 $test;

PHP核心-2.SAPI中的Cli

PHP 核心之旅系列 一、SAPI是什麼? 1.1 理解SAPI (1)SAPI是PHP框架的介面層。有很多種伺服器的SAPI的實現,程式碼在sapi資料夾下。常見的介面抽象層實現有:cgi,apache2,cli,embed,fpm。 (2)各個伺服器遵循著相同的約定,每個伺服器的SAP

PHP核心-6.垃圾回收機制

回收PHP 核心之旅系列 一、引用計數 只有使用引用計數的變數才需要回收。引用計數就是用來標記變數的引用次數的。 當有新的變數zval指向value時,計數器加1,當變數zval銷燬時,計數器減一。當引用計數為0時,表示此value沒有被任何變數指向,可以對value進行釋放。 下面的例子說明引用

PHP核心-1.生命週期

PHP 核心之旅系列 1.SAPI介面 PHP具體應用的程式設計介面。 2.開始和結束   PHP開始執行以後會經過兩個主要的階段:     處理請求之前的開始階段和請求之後的結束階段。       1.1開始階段:         1.1.1 模組初始化階段(MINT),只進行一次。  

java學習-4

個數 相同 參與 進制 amp 與運算 否則 來看 二進制位 位運算符在C裏面並沒有學到,所以算是新知識了,至於用途嘛,我還不太清楚,先來看看吧。 &: 參與運算的兩個數,若相應二進制位數的值都為1,則該結果值是1,否則是0,類似於“與”,例如: System.ou

Prism V2(4)

     上篇介紹了RegionAdapter的作用及如何如何擴充套件RegionAdapter的方法. 這篇向大家介紹一個在wpf中非常實用的功能Attach Behavior.我們稱之為附加行為. 附加行為在Web領域的流行  

4章:介紹python物件型別/4.1 python的核心資料型別/4.2.1 字串獲取操作、字串合併和重複操作

字串獲取操作 概念:用雙引號或者單引號括起來的一串字元 字串按下標獲取操作 定義字串 >>> S="abcd" 給字串求長度 >>> len(S)      4

父與子的程式設計4——列表與字典

1、可以使用append()、insert()或extend()向列表增加元素。 2、可以使用remove()、pop()或del()從列表刪除元素。 3、要得到一個有序副本,可以採用下面任意一種做法:   (1)建立列表的副本,使用切片(分片):new_list = my_list[:],     

【Linux-4】Linux關機重啟和遠端登入登出

一、關機與重啟相關命令的使用 關機與重啟相關命令 命令 功能 shutdown -h now 立即關機 shutdown -h 1 1分鐘後關機 shutdown -r

Tensorflow學習(4)

import tensorflow as tf #定義新增神經層的函式def add_layer(),它有四個引數:輸入值、輸入的大小、輸出的大小和激勵函式 #我們設定預設的激勵函式是None fro

Html5學習(4)iframe

本來不是H5的東西.不過看到這個用法有點小激動.自己試試吧 <!DOCTYPE html> <html> <head> <meta charset="

Linux下PHP開發-2.開發環境相關設定探索

一.預設目錄在哪兒? 開始時面對該xampp整合開發環境的相關配置有點不知所錯,於是便先想著找httpd.conf,通過該檔案,對該整合環境的配置檔案關係有了大致瞭解,具體操作如下; cd /opt/lampp/etc vi httpd.conf 預設ServerName

Linux下PHP開發-1.開發環境搭建

一.下載相關安裝包 從官網:https://www.apachefriends.org/download.html 下載對應版本的安裝包,由於學的版本為5.5,選擇5.6版本安裝包  二.執行安裝 由於下載的檔案直接就是xampp-linux-x64-5.6.39-0-i

我的CUDA學習4——Sobel運算元影象邊緣檢測CUDA實現

引言 關於影象邊緣檢測,記得剛開始接觸影象處理時,第一個自己實現的程式是通過筆記本攝像頭採集影象,利用OpenCV自帶的演算法庫進行Canny運算元邊緣檢測,那時候當看到程式執行後,視訊視窗實時顯示經Canny運算元邊緣分割後的影象,覺得十分有科技感,後來慢慢

Shader4:outline edge 描邊效果

書寫本文的初衷是為了自我反省記錄。如有表達不當,請批評指正 在shadertoy上看到了物體的描邊效果,感覺效果不錯,拿來學習一下,先貼出程式碼,然後分析 float d; float lookup(vec2 p, float dx, float dy) { vec2 uv = (

TOMCAT核心--一個簡單的WEB伺服器--學習心得(一)

TOMCAT核心之旅–一個簡單的WEB伺服器–學習心得(一) 標籤(空格分隔): web伺服器 一、學習背景 本人是一名大三學生,開始以java學習為主,後來學習了javaWEB,瞭解到了TOMCAT伺服器,很好奇其內部是如何實現的,其與瀏覽器

Android直播開發(4):MP3編碼格式分析與lame庫編譯封裝

轉載請宣告出處:http://blog.csdn.net/andrexpert/article/77683776 一、Mp3編碼格式分析       MP3,全稱MPEG Audio Layer3,是一種高效的計算機音訊編碼方案,它以較大的壓縮比(1:10至1:12)將音