在做算法题时遇到了如下报错:
计算:
134217728 bytes = 131072 KB = 128M
字面理解:
允许的最大内存为128M,它们被用完了,所以代码不能跑了。
官方说明:
与本条error相关的是php.ini中的对memory_limit的设置。
由官网给出的堆memory_limit的说明可以知道,php.ini中会通过对memory_limit的设置来限制赋予脚本的最大内存使用量。这样的设置,就是为了那些poorly written 的脚本消耗了服务器所有的可用内存。
mdzz。。。原来我写的脚本属于poorly written脚本。哎,同志仍需努力!
并且memory_limit 在php5.2.0之后默认值是128M。
我们可以通过ini_set('memory_limit','256M');来更改内存限制,如果要无限制,则设置为-1.
我果断设置了一波-1.然后,代码跑了好久好久好久。。。。。。。。。
之后,才输出结果。所以,优化代码才是王道!
补充:
通过本文,我们知道了写代码得优化,得朝着“用尽可能少的时间,使用尽可能少的内存,求出最佳结果”。
为了以后有效的评估时间、内存的消耗,有必要记住以下函数,用于统计脚本消耗的时间与内存:
1 <?php 2 $startTime = microtime(true); 3 //脚本内容执行 4 $endTime = microtime(true); 5 $time = $endTime - $startTime; 6 echo '脚本耗时:'.$time." "; 7 echo '占用最大内存:'.memory_get_peak_usage()." "; 8 echo '当前脚本使用的内存:'.memory_get_usage(). " "; 9 10 // To get the memory usage in KB or MB 11 function convert($size) 12 { 13 $unit=array('b','kb','mb','gb','tb','pb'); 14 return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; 15 } 16 17 echo convert(memory_get_usage(true)); // 123 kb