作为快速计算,您正在尝试创建一个包含以下内容的数组:
795*6942 = 5,518,890
整数。
如果我们考虑一个整数存储在4个字节上(即32位;使用PHP,它不会更小),这意味着:
5518890*4 = 22,075,560
字节。
好的,快速计算...结果是“它应该没问题”。
但事情并不那么容易,不幸的是:-(
我想这与PHP使用内部数据结构存储的事实有关,该内部数据结构比普通的32位整数复杂得多。
现在,为了好奇,让我们修改你的函数,以便它输出每个外部循环结束时使用的内存量:for
function zeros($rowCount, $colCount){
$matrix = array();
for ($rowIndx=0; $rowIndx<$rowCount; $rowIndx++){
$matrix[] = array();
for($colIndx=0; $colIndx<$colCount; $colIndx++){
$matrix[$rowIndx][$colIndx]=0;
}
var_dump(memory_get_usage());
}
return $matrix;
}
有了这个,我得到了这种输出(PHP 5.3.2-dev在64位系统上;memory_limit
设置为128MB
- 这已经很多了!:
int 1631968
int 2641888
int 3651808
...
...
int 132924168
int 133934088
Fatal error: Allowed memory size of 134217728 bytes exhausted
这意味着外部循环的每次迭代都需要大约1.5 MB的内存 - 而在脚本耗尽内存之前,我只得到了131次迭代;而不是你想要的765。for
考虑到你把你的设置为,你必须把它设置为更高的东西 - 比如memory_limit
128M
128*(765/131) = 747 MB
好吧,即使
ini_set('memory_limit', '750M');
这还不够...与 ,似乎足够了;-)800MB
但我绝对不建议设置如此高的价值!memory_limit
(如果您有2GB的RAM,您的服务器将无法处理超过2个并发用户^^;;说实话,如果我的计算机有2GB的RAM,我实际上不会测试这个)
我在这里看到的唯一解决方案是让你重新思考你的设计:除了使用这部分代码之外,你还必须做一些其他事情:-)
(顺便说一句:也许“重新思考你的设计”意味着使用另一种语言PHP:PHP在开发网站时很棒,但不适合每一种问题)