PHP可以';t设置范围(0,200万)--内存错误


PHP can't set range(0, 2 million) -- memory error

我需要为我当前的项目设置一个从1到200万的数组。问题是,当我试图执行。。。

编辑:

这是一个ProjectEuler问题,我已经解决了。然而,我正在重构代码以更快地完成它(最初的时间大约是90秒)。

我用埃拉托申斯筛来标记从0到2mil的素数。维基百科关于这个的文章
EndEdit

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

显然,如果这不起作用,那么代码的其余部分也不会起作用。

有什么想法吗?

附言:我试过ini_set('memory', '30M');,但也没用。

编辑

感谢所有指出记忆需要比我最初预期的要大得多的人。我通过加入ini_set('memory_limit', '4000000000'); //about 3.73 gig 解决了这个问题

EndFinalEdit

如果可以在任意位置设置,并从任意索引中获取数据,则没有序列数组的点。

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

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

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;
    }
}

查看php.ini文件。

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

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

从php.ini:

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