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


PHP manually memory allocation & class/object size

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

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

PHP已经有一个数组类与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'伴有消息'索引无效或超出范围'

在SPL中还有一些额外的数据结构。有关概述,请参阅

  • http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/

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

  • http://lxr.php.net/opengrok/xref/PHP_TRUNK/ext/spl/spl_fixedarray.c

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

不确定

您可能会耗尽内存,因为您的数组大小(理论上)仅受分配给脚本的内存量的限制。
ini_set('memory_limit', '1024M');在脚本的开头将内存限制设置为1 GB。为了获得最佳效果,您可能需要将其增加到更高。