gpt4 book ai didi

php - 欺骗 PHP 整数

转载 作者:可可西里 更新时间:2023-10-31 22:15:44 27 4
gpt4 key购买 nike

这与我在这里的帖子有关,但方向完全不同 Charset detection in PHP

本质上,我希望减少许多巨大数组所占用的内存。

这些数组全是整数,但由于 PHP 在内部使用 32 位和 64 位整数(取决于您为您的 CPU 类型编译的版本),它会占用内存。

有没有办法欺骗 PHP 使用 8 位或 16 位整数?

我考虑过使用 pack();为了完成这个,所以我可以有一个打包的二进制值数组,并在需要时解压它们(是的,我知道这会使它变慢,但比加载然后单独运行每个数组的替代方法快得多,因为你可以流式传输文本通过所以他们都需要同时在内存中以保持速度)

您能否提出任何更好的替代方案来完成此任务?我知道这很 hacky,但我需要防止巨大的内存激增。

最佳答案

不要告诉任何人!

class IntegerstringArray IMPLEMENTS ArrayAccess {

var $evil = "0000111122220000ffff";

// 16 bit each


function offsetExists ( $offset ) {
return (strlen($this->evil) / 4) - 1 >= $offset;
}

function offsetGet ( $offset ) {
return hexdec(substr($this->evil, $offset * 4, 4));
}

function offsetSet ( $offset , $value ) {

$hex = dechex($value);
if ($fill = 4 - strlen($hex)) {
$hex = str_repeat("0", $fill) . $hex;
}

for ($i=0; $i<4; $i++) {
$this->evil[$offset*4+$i] = $hex[$i];
}
}

function offsetUnset ( $offset ) {
assert(false);
}

}

所以你几乎可以从中创建一个数组对象:

$array = new IntegerstringArray();
$array[2] = 65535;
print $array[2];

它在内部存储一个列表并接受 16 位整数。数组偏移量必须连续。

Not tested. Just as an implementation guide.

关于php - 欺骗 PHP 整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505124/

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