2011-11-03 16 views
11

अनुसार php manual रहे हैं:पीएचपी चर संदर्भ और स्मृति के उपयोग

<?php 
$a =& $b; 
?> 
// Note: 
// $a and $b are completely equal here. $a is not pointing to $b or vice versa. 
// $a and $b are pointing to the same place. 

मुझे लगता है कि:

<?php 
$x = "something"; 
$y = $x; 
$z = $x; 

अधिक स्मृति का उपभोग करना चाहिए की तुलना में:

<?php 
$x = "something"; 
$y =& $x; 
$z =& $x; 

क्योंकि, अगर मैं यह समझ ठीक है, पहले मामले में हम मूल्य something 'डुप्लिकेट' करते हैं और इसेपर असाइन करते हैंऔर $z अंत में 3 चर और 3 सामग्री वाले हैं, जबकि दूसरे मामले में हमारे पास 3 चर pointing समान सामग्री है।

तो, की तरह एक कोड के साथ:

$value = "put something here, like a long lorem ipsum"; 
for($i = 0; $i < 100000; $i++) 
{ 
    ${"a$i"} =& $value; 
} 
echo memory_get_usage(true); 

मैं एक स्मृति के उपयोग की तुलना में कम पड़ सकती है:

$value = "put something here, like a long lorem ipsum"; 
for($i = 0; $i < 100000; $i++) 
{ 
    ${"a$i"} = $value; 
} 
echo memory_get_usage(true); 

लेकिन स्मृति के उपयोग दोनों ही मामलों में एक ही है।

मुझे क्या याद आ रही है?

उत्तर

14

PHP असाइनमेंट पर डुप्लिकेट नहीं करता है, लेकिन लिखने पर। इसके बारे में वैज्ञानिक चर्चा के लिए Copy-on-Write in the PHP Language (Jan 18 2009; by Akihiko Tozawa, Michiaki Tatsubori, Tamiya Onodera and Yasuhiko Minamide; PDF file) देखें, Do not use PHP references (Jan 10, 2010; by Jan Schlüter) कुछ मज़े के लिए और मेरा खुद का लेना References to the Max अधिक संदर्भों के साथ है।

+0

अधिक विस्तृत उत्तर :) – Benjie

3

PHP copy-on-write का उपयोग करता है, इसलिए जब तक आप उन्हें संशोधित नहीं करेंगे तब तक डुप्लिकेट स्ट्रिंग के लिए यह अधिक स्मृति का उपयोग नहीं करेगा।

संबंधित मुद्दे