PHP一个int值的变量需要多少内存?
How much memory does a variable with int value require in PHP?
我知道,这个问题之前可能已经被问过几次了,但是我已经阅读了这里所有类似的问题和所有答案,但仍然不明白。所以,我的脚本中有一个变量声明:
$a = 255;
这个变量需要多少内存?我读过 this excellent article,它解释了为内部 PHP 结构(如 _zval_struct
、_zval_gc_info
、_zend_mm_block_info
)分配了多少内存。结果是 48
字节。但是在我的机器上我得到 168
字节。他们来自哪里?我通过在声明前后调用 memory_get_usage()
获得此号码。
我是 运行 PHP 5.5.18(64 位)Mac OS X.
提前致谢。
因此,感谢 Sergiu Paraschiv 的评论,我安装了 memprof 并对该主题进行了一些小的研究。这是我在 Mac 上使用 PHP 5.5.18(64 位)得到的:
<?php
memprof_enable();
$a = 255; // +104 (+32 for smth initial?), total: 136
$b = 255; // +104, total: 240
$c = 255.5; // +104, total: 344
$d = 'h'; // +104, total: 448
$e = []; // +176, total: 624
$f = new stdClass; // +136, total: 760
$g = $f; // +72, total: 832
$h = $g; // +72, total: 904
$i = $a; // +72, total: 976
$j = &$i; // +104, total: 1080
$k = &$j; // +72, total: 1152 why not 104?
$l = &$h; // +104, total: 1256
$m = null; // +104, total: 1360
$n = true; // +104, total: 1464
print_r(memprof_dump_array());
Array (
[memory_size] => 1464
[blocks_count] => 27
[memory_size_inclusive] => 1464
[blocks_count_inclusive] => 27
[calls] => 1
[called_functions] => Array
(
[memprof_dump_array] => Array
(
[memory_size] => 0
[blocks_count] => 0
[memory_size_inclusive] => 0
[blocks_count_inclusive] => 0
[calls] => 1
[called_functions] => Array
(
)
)
)
)
我知道,这个问题之前可能已经被问过几次了,但是我已经阅读了这里所有类似的问题和所有答案,但仍然不明白。所以,我的脚本中有一个变量声明:
$a = 255;
这个变量需要多少内存?我读过 this excellent article,它解释了为内部 PHP 结构(如 _zval_struct
、_zval_gc_info
、_zend_mm_block_info
)分配了多少内存。结果是 48
字节。但是在我的机器上我得到 168
字节。他们来自哪里?我通过在声明前后调用 memory_get_usage()
获得此号码。
我是 运行 PHP 5.5.18(64 位)Mac OS X.
提前致谢。
因此,感谢 Sergiu Paraschiv 的评论,我安装了 memprof 并对该主题进行了一些小的研究。这是我在 Mac 上使用 PHP 5.5.18(64 位)得到的:
<?php
memprof_enable();
$a = 255; // +104 (+32 for smth initial?), total: 136
$b = 255; // +104, total: 240
$c = 255.5; // +104, total: 344
$d = 'h'; // +104, total: 448
$e = []; // +176, total: 624
$f = new stdClass; // +136, total: 760
$g = $f; // +72, total: 832
$h = $g; // +72, total: 904
$i = $a; // +72, total: 976
$j = &$i; // +104, total: 1080
$k = &$j; // +72, total: 1152 why not 104?
$l = &$h; // +104, total: 1256
$m = null; // +104, total: 1360
$n = true; // +104, total: 1464
print_r(memprof_dump_array());
Array (
[memory_size] => 1464
[blocks_count] => 27
[memory_size_inclusive] => 1464
[blocks_count_inclusive] => 27
[calls] => 1
[called_functions] => Array
(
[memprof_dump_array] => Array
(
[memory_size] => 0
[blocks_count] => 0
[memory_size_inclusive] => 0
[blocks_count_inclusive] => 0
[calls] => 1
[called_functions] => Array
(
)
)
)
)