【发布时间】:2015-09-23 04:00:29
【问题描述】:
我正在检查 CodeEval 中的一些问题,并在 PHP 中遇到了这个奇怪的错误。我没有在其他语言中遇到过这样的事情,所以我不知道为什么会发生这种情况。如果不包括整个答案(请不要帮我找到解决方案,除了为什么 PHP 会这样做),这就是我遇到问题的地方:
for ($j = 0; $j < count($beauty); $j++) {
$temp = $beauty[$j];
$beauty[$j] = $beauty[$j+1];
$beauty[$j+1] = $temp;
}
基本上我已经计算了每个字母的数量,现在我将对包含这些值的数组进行排序,以便确定字符串的“美”。奇怪的是我得到了错误:
允许的内存大小为 134217728 字节已用尽
运行上述代码块时。更奇怪的是,当我在 for 循环中取出最后一行时,我不再收到错误了。
for ($j = 0; $j < count($beauty); $j++) {
$temp = $beauty[$j];
$beauty[$j] = $beauty[$j+1];
}
可以正常工作,但我无法那样解决问题。我在想也许有一些奇怪的事情,比如 PHP 通过引用传递数组中的值,或者通过引用传递一般变量的值,这可能会导致问题,但我认为情况并非如此。我不明白为什么将以下数组位置的值设置为我存储在 $temp 中的值会导致程序占用那么多内存。本例中的循环仅适用于计数为 19 的数组。我无法想象 19 个整数如何占用 128Mb 的内存空间,即使我们在每次传递时都进行交换。
有人知道为什么会这样吗?
【问题讨论】:
标签: php arrays algorithm sorting memory