【发布时间】:2011-09-14 06:11:41
【问题描述】:
我正在使用一个大型数组,它是一个高度图,1024x1024,当然,我遇到了内存限制。在我的测试机器中,如果我愿意,我可以将内存限制增加到 1gb,但在我只有 256 ram 的小型 VPS 中,这不是一个选项。
我一直在堆栈和谷歌中搜索,发现了几个“嗯,你使用 PHP 不是因为内存效率,放弃它并用 c++ 重写”老实说,没关系,我承认 PHP 喜欢内存。
但是,在深入研究 PHP 内存管理时,我没有发现每种数据类型消耗的内存。或者,如果转换为另一种类型的数据会减少内存消耗。
我发现的唯一“优化”技术是取消设置变量和数组,仅此而已。
使用一些 PHP 解析器将代码转换为 c++ 会解决问题吗?
谢谢!
【问题讨论】:
-
数组在 PHP 中是真正需要内存的(因为它们实际上是字典)。如果您可以放弃一些(很多!)速度,您可以fake binary arrays like in C,我猜也适用于二维结构。但也许你真的想调查HipHop PHP to C++ compiler。
-
你需要减少多少内存使用?正如您所读到的,您可以在 PHP 中执行的内存管理方式很少。您可以进行一些“优化”,但可能没有什么可以根据您的需要进行削减。
-
PHP 中的每个变量都有与之相关的开销。不仅要存储变量的值,而且还要存储变量的名称、类型等……即使是简单的
$x[1] = 2;后面也有大量额外内容。 -
@mario 我想知道为什么链接的帖子在十六进制编码处停止并且不直接使用字符串的完整字节。看起来有点数学实际上可能更快......但我不使用 PHP(它不会考虑有效的多字节序列和诸如此类的东西:-)
-
@pst:我确实有另一个版本使用
pack()处理二进制字符串。但这并不是真的更快。只是节省了两倍的内存。 (在 PHP 中你可以伪造的只有这么多;)
标签: php arrays memory-management