php記憶體管理簡介

2021-07-14 00:13:10 字數 1052 閱讀 8799

**:

摘要:程式先建立乙個$a變數, 然後賦值$a變數為』helloworld』.然後建立$b變數,把$a變數賦值給$b變數.在這裡我們要思考的是,現在記憶體情況是怎樣的...

php記憶體管理簡介

程式先建立乙個$a變數, 然後賦值$a變數為』helloworld』.然後建立$b變數,把$a變數賦值給$b變數.在這裡我們要思考的是,現在記憶體情況是怎樣的.假如$a變數的記憶體占用為22位元組(假設值)的話,那$b占用多少位元組呢? 22位元組? 還是小於22位元組呢? 答案是小於22位元組.那php是怎樣實現的呢? 

其實php是通過refcount來實現的.當乙個變數賦值給另外乙個變數的時候, php只是簡單的把變數的refcount的值加1.使用的是zend_hash_add函式和zval_addref巨集.詳細可以參考以下**: 

[php] 

[/php] 

從上面的**可以看到變數是沒有增加的, 依然是helloval乙個變數.但是我們還可以看到通過zval_addref巨集來增加了引用計數器.所以helloval->refcount++.而且這時候還通過zend_hash_add向活動符號表增加了乙個符號名稱為b的符號.所以這樣就可以把記憶體使用減到最少. 

我們可以通過使用php的內建函式memory_get_usage()來驗證一下.**如下: 

[php] 

<?php 

$m1 = memory_get_usage(); 

$a = 1; 

$m2 = memory_get_usage(); 

$b = $a; 

$m3 = memory_get_usage(); 

echo $m2 - $m1 , "

", $m3 - $m2; 

?>[/php] 

實驗證明我們的說法是對的! 

那麼$b什麼時候才可以變成真正的變數呢? 我們可以使用把$b賦值乙個新的值: 

[php] 

<?php 

$a = 1; 

$b = $a; 

$b = 2; 

?>[/php] 

php記憶體管理簡介

php記憶體管理簡介

程式先建立乙個 a變數,然後賦值 a變數為 helloworld 然後建立 b變數,把 a變數賦值給 b變數.在這裡我們要思考的是,現在記憶體情況是怎樣的.假如 a變數的記憶體占用為22位元組 假設值 的話,那 b占用多少位元組呢?22位元組?還是小於22位元組呢?答案是小於22位元組.那php是怎...

記憶體管理 記憶體的簡介

32位機器具有4g的程式記憶體,這個記憶體並不是指實際的物理記憶體,而是虛擬記憶體這個虛擬記憶體並不是實際存在的。我們知道乙個虛擬空間由一組頁對映函式將虛擬空間的各個頁對映至相應的物理空間,那麼建立乙個虛擬空間實際上並不是建立空間而是建立對映函式所需要的相應的資料結構,在i386 的linux下,建...

PHP記憶體管理

var dump memory get usage a laruence var dump memory get usage unset a var dump memory get usage 輸出 在我的個人電腦上,可能會因為系統,php版本,載入的擴充套件不同而不同 int 90440 int ...