刚刚一个群里有人引出了 PHP 数组和对象占用内存谁多谁少的问题。我想起之前我好像也测试过这个问题,和群里人说的对象比数组节省内存的结论相反,我得出的是数组比对象节省内存。
但今天,我想说,这两种说法都不对!!!
话不多说,直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | /** * 随机生成文本 * @param int $length * @return string */ function randomText( $length ) { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ; $charLength = mb_strlen( $chars ); $result = '' ; for ( $i = 0; $i < $length ; ++ $i ) { $result .= mb_substr( $chars , mt_rand(1, $charLength ) - 1, 1); } return $result ; } class AAA { public $a , $b , $c , $d , $e ; public function __construct(... $v ) { $this ->a = $v [0]; $this ->b = $v [1]; $this ->c = $v [2]; $this ->d = $v [3]; $this ->e = $v [4]; } } $max = 10000; $a = memory_get_usage(); $list1 = []; for ( $i = 0; $i < $max ; ++ $i ) { $list1 [] = [ 'a' =>randomText(16), 'b' =>randomText(16), 'c' =>randomText(16), 'd' =>randomText(16), 'e' =>randomText(16)]; } echo 'PHP 数组内存占用:' , memory_get_usage() - $a , PHP_EOL; $a = memory_get_usage(); $list2 = []; for ( $i = 0; $i < $max ; ++ $i ) { $obj = new stdClass(); $obj ->a = randomText(16); $obj ->b = randomText(16); $obj ->c = randomText(16); $obj ->d = randomText(16); $obj ->e = randomText(16); $list2 [] = $obj ; } echo 'PHP stdClass内存占用:' , memory_get_usage() - $a , PHP_EOL; $a = memory_get_usage(); $list3 = []; for ( $i = 0; $i < $max ; ++ $i ) { $list3 [] = new AAA(randomText(16),randomText(16),randomText(16),randomText(16),randomText(16)); } echo 'PHP 自定义类内存占用: ' , memory_get_usage() - $a , PHP_EOL; |
运行结果:(不同人跑结果不同,但是谁多谁少不会变)
PHP 数组内存占用:6688472
PHP stdClass内存占用:7211320
PHP 自定义类内存占用: 4339512
结论:PHP 数组、对象内存占用,自定义类<数组<stdClass
友情提示:垃圾评论一律封号...