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運算元邊緣分割後的影象,覺得十分有科技感,後來慢慢
Shader之旅4: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)將音