PHP中的布尔值是否仅占用1位内存?

时间:2012-03-20 15:39:26

标签: php memory

正如问题所述,以下数组是否需要5位内存?

$flags = array(true, false, true, false, false);

[编辑]:道歉刚刚找到this duplicate

4 个答案:

答案 0 :(得分:2)

数组中的每个元素都存储在一个单独的内存位置,你还需要存储数组的哈希表以及键,所以NOOOO,它将是 lot 更多。< / p>

答案 1 :(得分:1)

没有。 PHP具有附加到每个定义的变量/数组元素的内部元数据。 PHP不直接支持位字段,因此最小的ACTUAL分配是一个字节,加上元数据开销。

答案 2 :(得分:1)

我怀疑有一个应用程序使用少于系统arcitecture的数据word作为最小数据存储单元。

但我相信它根本不应该引起您的关注。

答案 3 :(得分:1)

这取决于php解释器。标准解释器非常浪费,尽管这对于动态语言来说并不罕见。大量开销是由垃圾收集和每个值的动态特性引起的;因为数组的内容可以采用任意类型的任意值(即你可以写$ar[1] = 's';),所以必须存储类型和附加的元信息。

使用以下测试脚本:

<?php
$n = 20000000;

$ar = array();
$i = 0;
$before = memory_get_usage();
for ($i = 0;$i < $n;$i++) {
    $ar[] = ($i % 2 == 0);
}
$after = memory_get_usage();

echo 'Using ' . ($after - $before) . ' Bytes for ' . $n . ' values';
echo ', per value: ' . (($after - $before) / $n) . "\n";

我得到 150 每个数组条目的字节数(x64,php 5.4.0-2)。这似乎是在实现的更高端; ideone报告 73字节/条目(php 5.2.11),codepad也是如此。