PHP Fatal error——内存用尽

在做算法题时遇到了如下报错:

PHP Fatal error——内存用尽

计算:

134217728 bytes = 131072 KB = 128M

字面理解:

允许的最大内存为128M,它们被用完了,所以代码不能跑了。

 

官方说明:

与本条error相关的是php.ini中的对memory_limit的设置。

PHP Fatal error——内存用尽

由官网给出的堆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."\n";
 7 echo '占用最大内存:'.memory_get_peak_usage()."\n";
 8 echo '当前脚本使用的内存:'.memory_get_usage(). "\n"; 
 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