如问题所述,以下数组是否需要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也是如此。