1、memory_get_usage 函數
int memory_get_usage ([ bool $real_usage = false ] )
PHP腳本使用的記憶體(不含memory_get_usage()函數本身佔用的記憶體)
memory_get_usage()的參數$real_usage,預設為FALSE;當設定為TRUE 時,得到的記憶體值為PHP 記憶體管理所佔用的記憶體。
//php分配到的内存 var_dump(memory_get_usage(true)); //php使用内内存 var_dump(memory_get_usage());
結果
int 262144
int 239368
PHP的記憶體管理機制是:預先分配一塊空間,用來儲存變數,當空間不夠時,再申請一塊新的空間。
memory_get_usage(true)即為預先分配的記憶體。
之前沒有註意過PHP頁面的記憶體使用,以後優化頁面時候也應該用這個函數來分析程式碼。
2、變數賦值與記憶體
var_dump(memory_get_usage()); $a = "Hello World"; var_dump(memory_get_usage()); $b = $a; var_dump(memory_get_usage()); unset($b); var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
結果
int 239776
int 239912
int 240000
# int 239912
int 239776
239912-239776=136
240000-239912=88
$a和$b賦值所使用的記憶體不同,原因是$b賦值並沒有分配內存,這88個位元組是輸出函數佔用的。
另外銷毀$b,並不影響$a使用的內存,這個是內存管理引用計數的原因
改一下例子就能很清楚的了解變量賦值和內存的關係
var_dump(memory_get_usage()); $a = "Hello World"; var_dump(memory_get_usage()); $b = "Hello World"; var_dump(memory_get_usage()); unset($b); var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
結果
int 239816
int 239952
int 240088
int 239952
int 239816
239952-239816
##240088-239952=136$a = "Hello World"; xdebug_debug_zval('a');輸出a:(refcount=1, is_ref=0),
string 'Hello World' (length=11)
變數賦值的時候:is_ref為false refcount為1
以上是PHP變數和記憶體管理的學習筆記的詳細內容。更多資訊請關注PHP中文網其他相關文章!