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


Does a boolean value in PHP take up only 1 bit of memory?

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

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

[编辑]:很抱歉刚刚发现这个重复。

数组中的每个元素都存储在一个单独的内存位置,您还需要存储数组的哈希表和键,所以NOOOO,它将是一个更多

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

我怀疑是否有应用程序使用小于系统结构的数据word作为最小数据存储单元。

但我确信这根本不应该是你关心的问题。

它取决于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也是如此。