マニュアルによると、PHPの他の型の変数はオブジェクトを除いて、代入、パラメータの転送、戻り値はそれをコピーしているとのことですが、以下のテストを見ると問題があるのかわかりません。テストメソッドを使用するか、&を使用せずに参照渡しする場合、メモリの同じ部分は引き続き共有されますが、実際には要素を変更した後にコピーが生成されますか?
m = 0;$m = memory_get_usage();$t = array('id' => 1, 'name' => 'none');echo '$t 占用: ', memory_get_usage() - $m, PHP_EOL;$data = array();echo '空的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;$m = memory_get_usage();for($i=0; $i<1000; $i++) { $data[] = null;}echo '1000 个空元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;$data = array();$m = memory_get_usage();for($i=0; $i<1000; $i++) { $data[] = $t;}echo '1000 个$t元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;$data = array();$m = memory_get_usage();for($i=0; $i<1000; $i++) { $data[] = array('id' => 1, 'name' => 'none');}echo '1000 个实体元素的 $data 占用: ', memory_get_usage() - $m, PHP_EOL;
空の $data の占有数: 496
1000 の空の要素が $data を占有: 84200
1000 の $t 要素が $data を占有: 52104
1000 のエンティティ要素が $data を占有: 356136
これはもっと明確にしてください
もちろん、それは PHP がどのようにメモリを管理するかを理解したいだけです。公式情報はありますか? それとも PHP ソースを参照することはできますか?
PHP がメモリをどのように管理するかを知りたい場合は、もちろんソースコードを見るのが最善です
インターネット上には関連記事もいくつかありますが、それほど古いものではないため、現在の PHP には適していない可能性があります。結局、php5.3.6からカーネルが変更されました。もちろん速度も数桁向上しました
でも、勉強してもあまり意味はありません
せいぜい、変数が変数テーブルに格納されているということだけ知っていれば十分です
ハッシュ テーブル
/*变量的存储结构*/struct _zval_struct { zvalue_value value; /* 变量的值 */ zend_uint refcount__gc; zend_uchar type; /* 变量当前的数据类型 */ zend_uchar is_ref__gc;};typedef struct _zval_struct zval; /*变量值的存储结构*/typedef union _zvalue_value { long lval; /* 长整型 */ double dval; /* 双精度浮点型 */ struct { /*字符型*/ char *val; int len; } str; HashTable *ht; /* 存放数组 用哈希表 (就是个指针) */ zend_object_value obj; /*对象*/} zvalue_value;
PHP 変数は書き込み時にコピーされます
この記事をチェックしてください: http://www.laruence.com/2008/09/19/520.html