Gab*_*lla 3 php arrays segmentation-fault
在尝试定义这样的数组时:
$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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只能在CLI中获得"Segmentation Fault".我在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;
Run Code Online (Sandbox Code Playgroud)
JK和K是常数.JK = $jsize * $ksize;和K = $ksize.
无论如何,这可能会比创建3D阵列更好.
更新:
我在PHP 5.3.7-dev上尝试过它,并且没有段错误.所以,手指交叉,它已被修复,并将在PHP 5.3.7中正常工作.