少し気になったので、PHPでメモリがどのように消費されるかを調べてみようと思いました。 そこで、書いたテストコードがこれです。
memory_test.php
<?php $before_memory = memory_get_usage(); $a = array(); $after_memory = memory_get_usage(); $used_memory = $after_memory-$before_memory; echo "使用メモリ before[{$before_memory}] after[{$after_memory}]:after - before = {$used_memory}\n"; $before_memory = memory_get_usage(); for( $i = 0;$i < 100;$i++ ){ $a[] = ""; } $after_memory = memory_get_usage(); $used_memory = $after_memory-$before_memory; echo "使用メモリ before[{$before_memory}] after[{$after_memory}]:after - before = {$used_memory}\n";
実行結果がこちら
$ php -v PHP 5.3.29 (cli) (built: May 12 2015 22:42:19) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies $ php memory_test.php 使用メモリ before[626792] after[627256]:after - before = 464 使用メモリ before[627592] after[645496]:after - before = 17904
$ php -v PHP 7.1.27 (cli) (built: Mar 8 2019 18:22:16) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.27, Copyright (c) 1999-2018, by Zend Technologies with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans $ php memory_test.php 使用メモリ before[354456] after[354456]:after - before = 0 使用メモリ before[354488] after[362736]:after - before = 8248
php5.xとphp7.xでは、メモリ消費に大きな差があることがわかります。 php5.xでは配列を生成しただけで464バイトも消費されています。 (php7.xでは、0バイトなのでおそらくスタックに変数が作られているだけだと類推できます) 5.xと7.xでメモリ消費がおよそ2倍になっているので5.x系を利用している環境では注意したほうがいいですね。