这与我在这里的帖子有关,但是在PHP中使用Charset检测方向完全不同
本质上,我希望减少许多大型数组导致的内存.
这些数组只是整数,但看到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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以你几乎可以创建一个数组对象:
$array = new IntegerstringArray();
$array[2] = 65535;
print $array[2];
Run Code Online (Sandbox Code Playgroud)
它在内部存储一个列表并接受16位整数.阵列偏移必须是连续的.
没有测试过.就像实施指南一样.