Php数组字符串或var字符串


Php array string or var string?

我一直在用php中的一些字符串来制作我自己的框架。。。有件事"困扰"我。

$var = "hello!";
$arr = array("h","e","l","l","o","!");

有人能告诉我哪一个($var$arr)比另一个占用更多内存吗?为什么?

乍一看,我会说数组会使用更多的内存,因为它必须将每个字符定位在数组本身内部,但我不确定。

数组将使用比字符串更多的内存

字符串和数组本身就是zval结构,但数组中的每个元素也是字符串,每个元素都有自己的zval;数组占用的内存量惊人。还有一个事实是,数组元素包括一个键和一个值,每个都使用存储器

阅读本文,了解数组结构使用了多少内存

数组占用(大量!)更多内存。

PHP中的字符串是内存中的一个对象,它包含(例如)长度和指向内存中实际数据的指针。我认为在大多数平台上,长度为32位,指针为64位。由于某些CPU需要16字节的对齐,这意味着每个字符串将至少为32字节(描述符+实际数据),即使它只是一个字符。

示例中的数组包含6个字符串。这将是192个字节加上存储数组的开销,这也不是微不足道的(至少还要计算128个字节)。

免责声明:这个答案中使用的数字是一个粗略的近似值-预计会比这里提到的开销大得多