1
如果我在我的電腦爲什麼get_memory_usage保留內存?
echo memory_get_usage();
echo "|";
echo memory_get_usage();
echo "|";
echo memory_get_usage();
上運行下面的PHP程序我得到的輸出
635048|635080|635080
由此看來,似乎memory_get_usage
初始呼叫保留的內存32KB。我想這沒有echo
聲明
echo memory_get_usage();
echo memory_get_usage();
echo memory_get_usage();
,並得到了類似的結果
634504634536634536
//broken out 634504, 634536, 634536
在去除echo
報表降低腳本的總體內存使用情況,有初始呼叫後仍然滯留在32KB到memory_get_usage
。爲什麼是這樣?
我試過多臺電腦,雖然實際數字不同,但差距仍然相同。
如果我看(我認爲是)這個函數
//File: php-5.3.19/ext/standard/var.c
PHP_FUNCTION(memory_get_usage) {
zend_bool real_usage = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &real_usage) == FAILURE) {
RETURN_FALSE;
}
RETURN_LONG(zend_memory_usage(real_usage TSRMLS_CC));
}
的來源我不認爲有什麼看不一定說「在內存中保留這個變量」。不過,我多年來都沒有認真寫過C,而且我從未專業地攻擊過PHP源代碼,並且我的追蹤執行能力也沒有。
所以,我的問題是,什麼保留了32KB的內存,以及PHP源代碼中發生了什麼,以及/或者我如何從memory_get_usage
入口點跟蹤它。
初始輸出緩衝,也許?如果你在第一個措施之前回應了什麼會發生什麼? – Charles
這就是它@Charles - 如果你喜歡,我會迴應/接受。 –