問題描述
如果 real_usage
參數設置為 true
,PHP DOCS 會說它將獲得系統分配的實際內存大小.如果它是 false
它將獲得 emalloc()
If the real_usage
argument is set to true
the PHP DOCS say it will get the real size of memory allocated from system. If it's false
it will get the memory reported by emalloc()
這兩個選項中的哪一個返回最大值.相對于php.ini中的內存限制值分配的內存?
Which one of these 2 options returns the max. memory allocated relative to the memory limit value in php.ini ?
我想知道腳本離達到該限制有多近.
I want to know how close was the script to hit that limit.
推薦答案
好的,讓我們用一個簡單的腳本來測試一下:
Ok, lets test this using a simple script:
ini_set('memory_limit', '1M');
$x = '';
while(true) {
echo "not real: ".(memory_get_peak_usage(false)/1024/1024)." MiB
";
echo "real: ".(memory_get_peak_usage(true)/1024/1024)." MiB
";
$x .= str_repeat(' ', 1024*25); //store 25kb more to string
}
輸出:
not real: 0.73469543457031 MiB
real: 0.75 MiB
not real: 0.75910949707031 MiB
real: 1 MiB
...
not real: 0.95442199707031 MiB
real: 1 MiB
not real: 0.97883605957031 MiB
real: 1 MiB
PHP Fatal error: Allowed memory size of 1048576 bytes exhausted (tried to allocate 793601 bytes) in /home/niko/test.php on line 7
似乎真正的使用是從系統分配的內存 - 這似乎是在比腳本當前所需的更大的存儲桶中分配的.(我猜是出于性能原因).這也是php進程使用的內存.
Seems like real usage is the memory allocated from the system - which seems to get allocated in larger buckets than currently needed by the script. (I guess for performance reasons). This is also the memory the php process uses.
$real_usage = false
使用量是您在腳本中實際使用的內存使用量,而不是 Zend 的內存管理器分配的實際內存量.
The $real_usage = false
usage is the memory usage you actually used in your script, not the actual amount of memory allocated by Zend's memory manager.
閱讀這個問題了解更多信息.
簡而言之:要了解您離內存限制有多近,請使用 $real_usage = true
In short: to get how close are you to the memory limit, use $real_usage = true
這篇關于memory_get_peak_usage() 具有“實際使用情況";的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!