PHP无法设置范围(0,200万) - 内存错误

时间:2012-02-26 20:16:51

标签: php memory

我需要为当前项目设置一个1到200万的数组。问题是当我尝试执行时出现内存错误...

修改

这是针对我已经解决的ProjectEuler问题。但是,我正在重构代码以更快地完成它(原始时间约为90秒)。

我正在使用eratosthenes的筛子来标记从0到2mil的素数。 Wikipedia article on this
EndEdit中

<?php
range(0,2000000);
?>

显然,如果这不起作用,其余的代码将无效。

有什么想法吗?

P.S。我试过ini_set('memory', '30M');,但这也不起作用。

修改

感谢所有指出内存需要比我最初预期的要大得多的人。我通过投掷ini_set('memory_limit', '4000000000'); //about 3.73 gig

解决了这个问题

EndFinalEdit

3 个答案:

答案 0 :(得分:0)

看看php.ini文件。

有一个设置memory_limit - 这可能会阻止你做这个荒谬的范围。

答案 1 :(得分:0)

对于范围(0,2000000),您将需要超过160M的内存,而对于范围(1000000,2000000),这将是一半。

来自php.ini:

脚本可能消耗的最大内存量(128MB) ; http://php.net/memory-limit memory_limit = 256M

答案 2 :(得分:0)

如果您可以设置在任意位置并从任意索引获取数据,那么顺序数组就没有意义了。

// completely acceptable in php
$data[2000000] = 2000000; 

如果您在控制台中解决此euler问题(我通常会这样做),然后使用-d memory_limit=4G参数运行php文件。它将以4 GB的内存运行。

php -d memory_limit=4G /path/to/euler/problem.php 

BTW您可以创建一些魔术类,它可以模仿您拥有类似的大阵列。 :)

class MySuperCoolLongIntArray{
    private $data=array();
    public get_int($index){
        return isset($this->data[$index])? $this->data[$index]: 0;
    }
    public set_int($index, $value){
        $this->data[$index]=$value;
    }
}