我需要为当前项目设置一个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
答案 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;
}
}