PHP7中的資料型別
PHP中變數名zval,變數值zend_value。其變數記憶體是透過引用計數管理的,在PHP7中引用計數在value結構中。
變數型別:
標頭檔案在PHP原始碼 /zend/zend_types.h
內部實現:
PHP透過zval這個結構體來表示一個變數,而不同型別的變數值則透過zval嵌入的一個人聯合體表示,即zend_value。
zend_value是一個聯合體,其程式碼如下:
ast、ptr、zv這些型別只給核心自己使用。
字串:
PHP為字串單獨定義了一個結構:zend_string。在zend_value中透過str指向具體結構。
儲存字串內容的val比較特殊。
val並沒有使用char*型別,字串分配時是類似這樣操作的:malloc(sizeof(zend_sting)+字串長度),就是會多分配出一些記憶體來儲存字串內容,這塊多出來的記憶體起始位置就是val。
這樣做的好處可以省去一次記憶體分配(char*),且更有助於記憶體管理。
val中多出來的一個位元組(結構體中為val[1]而不是val[0])用於儲存儲存字串的最後一個字元"
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2822058/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java中的基本資料型別與引用資料型別Java資料型別
- Java中的資料型別Java資料型別
- javascript中的資料型別JavaScript資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- PHP7型別約束PHP型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- pandas中的series資料型別資料型別
- Hive中的集合資料型別Hive資料型別
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- Javascript 中的資料型別判斷JavaScript資料型別
- PowerShell中的基礎資料型別資料型別
- Oracle中的TIMESTAMP資料型別Oracle資料型別
- 【OpenCV教程】OpenCV中的資料型別OpenCV資料型別
- DB2 資料庫中的資料型別DB2資料庫資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- 自主資料型別:在TVM中啟用自定義資料型別探索資料型別
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- DB2資料庫中的各資料型別DB2資料庫資料型別
- 1-02:MySQL中的資料型別MySql資料型別
- Java中的資料型別和運算子Java資料型別
- 關於oracle中的sql資料型別OracleSQL資料型別
- SQL Server 中的25種資料型別SQLServer資料型別
- Objective-C 中的特殊資料型別Object資料型別
- SQL Server中易混淆的資料型別SQLServer資料型別
- ABAP中Char型別資料轉換成Decimal型別型別Decimal
- 強資料型別和弱資料型別資料型別
- 區別值型別資料和引用型別資料型別
- javascript中的資料型別及其常見用法JavaScript資料型別
- Hive中的資料型別以及案例實操Hive資料型別
- 全面解析Java中的String資料型別Java資料型別
- SQL Server 中易混淆的資料型別(轉)SQLServer資料型別
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- 資料型別,型別轉換資料型別
- SQL Server 中自定義資料型別SQLServer資料型別
- SQL Server中操作XML型別資料SQLServerXML型別
- MySQL 的資料型別MySql資料型別