当尝试定义这样的数组时:
$array = new SPLFixedArray(256);
for ($i = 0; $i < 256; $i++) {
$array[$i] = new SPLFixedArray(256);
for ($j = 0; $j < 256; $j++) {
$array[$i][$j] = new SPLFixedArray(5);
for ($k = 0; $k < 5; $k++) {
$array[$i][$j][$k] = 0;
}
}
}
我只在 CLI 中得到“段错误”。我在 C/C++ 中的 SO 上阅读了此类错误,这很可能是内存问题,建议使用 malloc() 将所有内容加载到堆内存中。在 PHP 中我们有这样的工具吗?
即使在小型 3d 阵列中也会发生这种情况,例如 15 而不是 256(但在 15 以下有效)。
谢谢!
最佳答案
只有 PHP 错误才会出现段错误;你永远不应该那样做。它在 PHP 5.3.5 上对我来说是段错误。我在 5.3.6 的更改日志中看不到任何表明它已被修复的内容。 (对我来说它也在 5.3.6 上崩溃。)
作为解决方法,您可以这样做:
$array = new SplFixedArray(256 * 256 * 5);
$array[$i * JK + $j * K + $k] = $foo;
JK 和 K 是常数。 JK = $jsize * $ksize;
和 K = $ksize
。
这可能会给您带来比创建 3D 阵列更好的性能。
更新:
我在PHP 5.3.7-dev上试过,没有段错误。所以,祈祷吧,它已经被修复并且可以在 PHP 5.3.7 中正常工作。
关于php - 固定 PHP 5.3.5 数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352111/