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
  • 相关阅读:
    mac添加环境变量
    Flex 中文字体终极解决方案
    C# Label背景透明
    C# 字节数组和十六进制字符串之间转换的另类写法
    C# params 动态参数
    HttpFlexSession注册失败的怪问题
    sun.misc.BASE64Encoder找不到jar包的解决方法
    Eclipse jee 3.7常用插件安装手记
    GitHub安装缓慢甚至下载失败的解决办法
    subclipse解决JavaHL不可用的问题
  • 原文地址:https://www.cnblogs.com/jade640/p/6624948.html
Copyright © 2011-2022 走看看