zoukankan      html  css  js  c++  java
  • PHP Fatal error——内存用尽

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

    计算:

    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
  • 相关阅读:
    PTA 7-9 空心字母金字塔 (10分)【待优化】
    PTA 7-12 交换最小值和最大值 (15分)
    PTA 7-8 分队列 (10分)
    PTA 7-6 计算阶乘和 (10分)
    PTA 7-5 得分计算器 (20分)
    PTA 7-4 有重复的数据 (10分)
    PTA 7-1 数组元素循环右移问题 (20分)
    PTA 7-1 换硬币 (20分)
    PTA 7-6 又来一个上三角数字三角形 (10分)【待完善】
    PTA 7-5 画菱形 (10分)
  • 原文地址:https://www.cnblogs.com/jade640/p/6624948.html
Copyright © 2011-2022 走看看