我已经尝试了一些简单变量的内存使用,遇到了意外的结果,请参考以下代码:
$datetimes = [];
$memory_before = memory_get_usage();
for ($x = 0; $x < 1000; $x++) {
$datetimes[] = new \DateTime();
}
var_dump('DateTimes: ' . (memory_get_usage() - $memory_before));
$ints = [];
$memory_before = memory_get_usage();
for ($x = 0; $x < 1000; $x++) {
$ints[] = $x;
}
var_dump('Integers: ' . (memory_get_usage() - $memory_before));我得到以下输出(在PHP 7.4,64位上):
string(17) "DateTimes: 350504"
string(15) "Integers: 37160"1000int的37KB内存对我来说没什么意义,对吧?我期望的是8000字节加上一些数组开销。
我的实验规模:对于一百万个int,我得到了33558808字节的内存使用量。
我已经禁用了xdebug。
发布于 2021-07-13 21:48:58
这就是PHP的工作原理和拥有动态类型变量的缺点。
这个整数实际上是一个Zend object。
1000 x (64 * 2) = 128 Kbit,即16KB。
再加上大小为1000的数组。
在内存中,
表示为两个64位字。第一个字保持值,第二个字保持类型、type_flags、extra和reserved字段。
https://stackoverflow.com/questions/68363637
复制相似问题