【发布时间】:2011-07-27 04:22:20
【问题描述】:
这与我在这里的帖子有关,但方向完全不同 Charset detection in PHP
基本上,我希望减少许多大型数组造成的内存。
这些数组只包含整数,但由于 PHP 在内部使用 32 位和 64 位整数(取决于您为 CPU 类型编译的版本),它会占用内存。
有没有办法欺骗 PHP 使用 8 位或 16 位整数?
我考虑过使用 pack();来完成这个,所以我可以有一个打包的二进制值数组,并在需要时解压它们(是的,我知道这会使其变慢,但比加载然后单独运行每个数组的替代方法要快得多,因为你可以流式传输文本通过,因此它们都需要同时在内存中以保持速度)
您能否提出更好的替代方案来实现这一目标?我知道这很 hacky,但我需要防止巨大的内存激增。
【问题讨论】:
-
这听起来不像是减少内存使用的明智策略。是什么导致您的脚本激增?你能举一些例子吗?真的有必要一次将那些巨大的数组加载到内存中吗?你拿他们做什么?
-
稍微有用的提示:如果您想处理大量数字,请忘记 PHP。尝试一些更有效的资源。 (C/C++)
-
我同意 Pekka 的观点,PHP 已经有很好的内存管理,改变整数的位长不是一个好的解决方案。相反,您应该寻找真正的原因,即巨大的数组本身。如果您能提供有关您正在执行的操作的更多详细信息,我们可能会提供更多帮助。
-
@erenon:没错,但在 PHP 最常用的环境(远程/网络服务器)中,C/C++ 很少是一个简单或可行的选择。
-
PHP 中整数数组的真正问题不是整数位宽,而是数组本身。 PHP 没有。它有字典。如果您想节省内存,请尽可能使用SplFixedArray。否则,您将不得不进行微优化:将您的数组打包成一个字符串,每个使用四个字符来打包一个十六进制字符串。 (在 PHP 中你只能用内存换取速度)。
标签: php