gpt4 book ai didi

php - 固定 PHP 5.3.5 数组的段错误

转载 作者:可可西里 更新时间:2023-11-01 00:36:29 25 4
gpt4 key购买 nike

当尝试定义这样的数组时:

$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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com