php - 为什么整数值占用 72 字节的内存?

标签 php memory

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/

相关文章:

java - 需要一个应用程序来修复带有未转义字符的 XML

iphone - 奇怪的 iOS 内存分配行为

ios - Unity3d 使用内存 : load and unload prefabs

video - iOS App崩溃并异常退出信号11 : Segmentation fault: 11

php - PDO errorInfo完整列表,特别是错误代码1451

php - codeigniter php 和 jquery - 如何从多个表中获取数据并通过 ajax 返回数据

php - 为什么尽管在镜像构建期间通过 "drush"安装了 `composer global install`,但我无法从正在运行的 PHP 脚本中找到该工具?

javascript - 使用 javascript 将数据库中的 php 变量与表单字段 onchange 进行比较,并相应地显示/隐藏跨度

memory - 使用BIOS int 0x15/E820查看内存映射

c++ - 在一个线程上删除具有数百万个字符串的大型 HashMap 会影响另一个线程的性能