PHPにおける配列とメモリの管理について

WBOY
リリース: 2016-06-23 13:59:48
オリジナル
914 人が閲覧しました

マニュアルによると、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;
ログイン後にコピー
$t の占有数: 360

空の $data の占有数: 496
1000 の空の要素が $data を占有: 84200
1000 の $t 要素が $data を占有: 52104
1000 のエンティティ要素が $data を占有: 356136

これはもっと明確にしてください

実際には、パラメーターを渡すとき、または大きな配列を返すときに、参照渡しが必要かどうかを知りたいだけです

もちろん、それは PHP がどのようにメモリを管理するかを理解したいだけです。公式情報はありますか? それとも PHP ソースを参照することはできますか?

PHP がメモリをどのように管理するかを知りたい場合は、もちろんソースコードを見るのが最善です

インターネット上には関連記事もいくつかありますが、それほど古いものではないため、現在の PHP には適していない可能性があります。結局、php5.3.6からカーネルが変更されました。もちろん速度も数桁向上しました

でも、勉強してもあまり意味はありません
せいぜい、変数が変数テーブルに格納されているということだけ知っていれば十分です

もちろん、それはPHP がメモリをどのように管理するかを知りたいのですが、公式の情報はありますか? それとも PHP のソースを参照することはできますか?


ハッシュ テーブル

/*变量的存储结构*/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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート