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資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- pandas中的series資料型別資料型別
- Hive中的集合資料型別Hive資料型別
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- 【OpenCV教程】OpenCV中的資料型別OpenCV資料型別
- MySQL中資料型別的驗證MySql資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- 自主資料型別:在TVM中啟用自定義資料型別探索資料型別
- Java中的資料型別和運算子Java資料型別
- 1-02:MySQL中的資料型別MySql資料型別
- 區別值型別資料和引用型別資料型別
- JS中資料型別轉換JS資料型別
- 資料型別是什麼?Python的資料型別又有哪些?資料型別Python
- MySQL 的資料型別MySql資料型別
- JS的資料型別JS資料型別
- javaScript的資料型別JavaScript資料型別
- 資料型別,型別轉換資料型別
- javascript中的資料型別及其常見用法JavaScript資料型別
- Hive中的資料型別以及案例實操Hive資料型別
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- 資料型別資料型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- Vector中存放自定義資料型別資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- Android NDK開發中java資料型別與C/C++資料型別的對應關係AndroidJava資料型別C++
- Java中基本資料型別和包裝型別有什麼區別?Java資料型別
- 基本資料型別與API引用型別的使用資料型別API
- 基本資料型別與字串型別資料型別字串
- 資料結構中抽象資料型別是什麼?資料結構抽象資料型別
- 資料庫中欄位資料型別以及約束資料庫資料型別
- mysql資料庫中decimal資料型別比較大小MySql資料庫Decimal資料型別
- JS裡的資料型別JS資料型別