首先讓我們看一個問題: 如下代碼的輸出,
復制代碼 代碼如下:
var_dump(memory_get_usage());
$a = "laruence";
var_dump(memory_get_usage());
unset($a);
var_dump(memory_get_usage());
輸出(在我的個人電腦上, 可能會因為系統,PHP版本,載入的擴展不同而不同):
int(90440)
int(90640)
int(90472)
復制代碼 代碼如下:
emalloc(size_t size);
efree(void *ptr);
ecalloc(size_t nmemb, size_t size);
erealloc(void *ptr, size_t size);
estrdup(const char *s);
estrndup(const char *s, unsigned int length);
復制代碼 代碼如下:
<?php
var_dump(memory_get_usage(TRUE)); //注意獲取的是real_size
$a = "laruence";
var_dump(memory_get_usage(TRUE));
unset($a);
var_dump(memory_get_usage(TRUE));
輸出:
int(262144)
int(262144)
int(262144)
復制代碼 代碼如下:
<?php
var_dump("I am Laruence, From ");
var_dump(memory_get_usage());
$a = "laruence";
var_dump(memory_get_usage());
unset($a);
var_dump(memory_get_usage());
輸出:
string(43) "I am Laruence, From "
int(90808) //賦值前
int(90976)
int(90808) //是的, 內存正常釋放了
90808-90808 = 0, 正常了, 也就是說這32個字節是被輸出函數給占用了(嚴格來說, 是被輸出的Header占用了)
復制代碼 代碼如下:
var_dump("I am Laruence, From ");
var_dump(memory_get_usage());
$array = array_fill(1, 100, "laruence");
foreach ($array as $key => $value) {
${$value . $key} = NULL;
}
var_dump(memory_get_usage());
foreach ($array as $key=> $value) {
unset(${$value . $key});
}
var_dump(memory_get_usage());
復制代碼 代碼如下:
string(43) "I am Laruence, From "
int(93560)
int(118848)
int(104448)
新聞熱點
疑難解答