Possible Duplicate:
What is the overhead of using PHP int?
谁能解释一下,为什么在 PHP 中创建一个整数需要 72 个字节?
var_dump(memory_get_usage()); //49248 bytes
$a = 255;
var_dump(memory_get_usage()); // 49320 bytes
最佳答案
我没有广泛的 PHP 内部知识,但概念是,当您创建一个具有整数值的变量时,PHP 会在内部分配一个结构(这种结构通常称为 variants)能够保存语言中的任何类型的值(包括对象类型、函数等)。这必然需要超过 4 个字节。
除此之外,剩下的问题是为什么是 72(而不是例如 42)?为了回答这个问题,我们不仅需要检查 C 源代码(查看确切分配了什么以及它的内存占用量是多少),还需要检查 memory_get_usage
的实现(看看它是如何计算内存使用的)。
更新:我觉得我需要更多地强调“它如何计算内存使用量”部分。
新变量的分配完全有可能导致 PHP 的内存分配器从 C 堆中保留一 block 内存,该内存块远大于满足变量分配请求所需的内存块(它也可以决定将来保留该内存即使在你之后使用,例如 unset
变量)。
如果 memory_get_usage
想要将整个内存块计算为“已使用”,那么您甚至可以看到一个简单的整数变量导致使用量增加 1K(如果事情像到目前为止,我已经描述过,额外的整数分配将不会导致内存使用量增加)。
我的观点是,在您完全定义预期结果之前,您不能将内存使用结果称为意外。如果不查看 memory_get_usage
的来源,这是不可能的。
关于php - 为什么整数值占用 72 字节的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358512/