PHP手动内存分配&类/对象大小

时间:2011-10-15 15:03:53

标签: php arrays malloc

由于PHP不提供真正的数组,我想自己创建一个数组类。但是,我最好不要为PHP数组创建某种包装类,但我真的想创建一个真正的数组,就像在C / C ++中一样。但是,如果我不想在PHP数组中使用构建,我需要有一些方法来手动分配内存,并找到对象/类的大小。所以我需要一个PHP版本的c函数sizeof和malloc。不幸的是,我找不到PHP中的那些。是否存在执行相同操作的功能,或者您知道其他任何方法吗?

编辑:我认为我的问题不够明确: 在PHP中,数组实际上是一个订单映射。在某些情况下,这可能会使事情变得更复杂:例如,如果您有一个索引为0,1,2和3的数组,则无法继续,您将在foreach循环中按顺序获取这些项:它取决于您在数组中定义项目的顺序。既然这些小事烦恼了我,我想创建一个'真正的'数组类,基于类似于c / c ++的数组。这意味着数组应该具有固定的大小,并且我需要在初始化数组时手动分配内存。例如,当创建10个整数的数组时,数组类应该分配大小为10 * sizeof(整数)的内存块。当然我可以使用PHP'array'中的构建来存储这10个整数,但是我刚刚为构建数组类型创建了一个包装类。所以我最好能够自己分配内存,这样我就能以更好的方式管理它,即数组类型的构建。但是,我找不到一个给出类/对象大小的函数,我可以找到一个可以手动分配内存的函数,就像c中的malloc一样。 所以我的问题是:这有什么功能吗?如果他们不是,你有没有其他有效的方法来实现我的目标?

2 个答案:

答案 0 :(得分:8)

PHP已经有Array Class with SplFixedArray的行为就像你想要的那样:

$array = new SplFixedArray(3);
$array[1] = 'foo';
$array[0] = 'bar';
$array[2] = 'baz';
foreach ($array as $k => $v) {
    echo "$k => $v\n";
}
$array[] = 'fails';

给出

0 => bar
1 => foo
2 => baz

最后

  

致命错误:未捕获的异常'RuntimeException',消息'索引无效或超出范围'

还有一些data structures in SPL。有关概述,请参阅

如果您想知道如何在PHP中实现SplFixedArray,请查看

如果你想要任何不同的东西,你可能必须在语言的C级实现它,例如你必须写自己的扩展名。

答案 1 :(得分:0)

不确定

您可能内存不足,因为您的阵列大小(理论上)仅受分配给脚本的内存量的限制。
ini_set('memory_limit', '1024M'); 在脚本的开头将内存限制设置为1 GB。您可能需要将此值提高更高才能获得最佳效果。