পিএইচপি দিয়ে মেমরি মুক্ত করার ক্ষেত্রে আরও ভাল কী: আনসেট () বা $ var = নাল


244

আমি বুঝতে পারি যে দ্বিতীয়টি কোনও ফাংশন কলের ওভারহেড এড়িয়ে চলেছে ( আপডেট , আসলে একটি ভাষা নির্মাণ) তবে এটি জেনে রাখা আকর্ষণীয় হবে যে একজন অন্যটির চেয়ে ভাল কিনা। আমি unset()আমার বেশিরভাগ কোডিংয়ের জন্য ব্যবহার করে আসছি তবে আমি সম্প্রতি কয়েকটি সম্মানজনক ক্লাস দেখেছি যা নেট $var = nullপরিবর্তে ব্যবহার করেছে ।

পছন্দসই একটি আছে, এবং যুক্তি কি?

উত্তর:


234

এটি ২০০৯ সালে আনসেট করা ম্যানুয়ালটির পৃষ্ঠাতে উল্লেখ করা হয়েছিল :

unset()এর নাম যা বলে ঠিক তাই করে - একটি ভেরিয়েবল আনসেট করুন। এটি তাত্ক্ষণিক স্মৃতিশক্তি জোর করে না। পিএইচপি-র আবর্জনা সংগ্রাহক যখন এটি ফিট হয় তখনই তা করবে - উদ্দেশ্য হিসাবে শীঘ্রই, সেই সিপিইউ চক্রের কোনওভাবেই প্রয়োজন হয় না, বা স্ক্রিপ্টটির স্মৃতিশক্তি শেষ হয়ে যাওয়ার আগে যেমন দেরি হয় ততক্ষণে late

আপনি যদি তা করে থাকেন $whatever = null;তবে আপনি ভেরিয়েবলের ডেটা আবার লিখছেন। আপনি মেমরি দ্রুত মুক্তি / সঙ্কুচিত পেতে পারেন, তবে এটি কোড থেকে সিপিইউ চক্রগুলি চুরি করতে পারে যা সত্যই তাদের দ্রুত প্রয়োজন, ফলস্বরূপ দীর্ঘতর সামগ্রিক প্রয়োগের সময় হতে পারে।

(২০১৩ সাল থেকে, সেই unsetম্যান পেজটিতে আর কোনও বিভাগ অন্তর্ভুক্ত নেই)

নোট করুন যে পিএইচপি 5.3 অবধি, আপনার যদি বিজ্ঞপ্তিযুক্ত রেফারেন্সে দুটি বস্তু থাকে যেমন পিতামাতা-সন্তানের সম্পর্কের ক্ষেত্রে, প্যারেন্ট অবজেক্টে আনসেট () কল করা শিশু অবজেক্টে পিতা-মাতার রেফারেন্সের জন্য ব্যবহৃত স্মৃতি মুক্ত করে না। (পিতা-মাতার অবজেক্টটি আবর্জনা সংগ্রহের সময় স্মৃতি মুক্ত হবে না)) ( বাগ ৩৩৫৯৫ )


প্রশ্ন " আনসেট এবং = নাল মধ্যে পার্থক্য " কিছু পার্থক্য বিশদ দেয়:


unset($a)$aপ্রতীক টেবিল থেকে অপসারণ ; উদাহরণ স্বরূপ:

$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);

আউটপুট:

Notice: Undefined variable: a in xxx
NULL

তবে কখন $a = nullব্যবহৃত হয়:

$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:

NULL

দেখে মনে হচ্ছে এটি $a = nullএর unset()সমকক্ষের তুলনায় কিছুটা দ্রুত a প্রতীক টেবিল এন্ট্রি আপডেট করা এটি অপসারণের চেয়ে দ্রুত বলে মনে হচ্ছে।


  • আপনি যখন অস্তিত্বহীন ( unset) ভেরিয়েবলটি ব্যবহার করার চেষ্টা করবেন তখন একটি ত্রুটি ট্রিগার হয়ে উঠবে এবং ভেরিয়েবলের এক্সপ্রেশনটির মান নাল হবে। (কারণ, পিএইচপি আর কি করা উচিত? প্রতিটি অভিব্যক্তিটির কিছুটা মূল্য হওয়া দরকার))
  • নাল দ্বারা নির্ধারিত একটি ভেরিয়েবল যদিও এখনও নিখুঁতভাবে স্বাভাবিক পরিবর্তনশীল।

18
নোট করুন যে $whateverকোনও বস্তুর দিকে নির্দেশ করলে, $whatever = nullপয়েন্টারটি ওভাররাইট করে, বস্তুটি নিজেই নয়, সুতরাং এটি মূলত একইরূপে কাজ করে unset()
গ্রাস ডাবল

1
@ ভনসি: আপনি উল্লেখ করছেন যে পিএইচপি.এন.এতে আনসেট উদ্ধৃতিটি আর নেই।
জর্জেন থেলেন

@ জার্জেনহেলেন সত্য, তবে সেই পুরানো উত্তরের বিষয়বস্তু এখনও প্রাসঙ্গিক বলে মনে হচ্ছে, না?
ভনসি

1
@ ভনসি: অবশ্যই। আমি "সিপিইউ চক্রের দরকার নেই" এবং "এর আগে .. মেমরির বাইরে" সম্পর্কে আবর্জনা সংগ্রহের সূত্রপাত সম্পর্কে নিশ্চিত। Stackoverflow.com/q/20230626/693207 দেখুন । আপনি কিছু আলো চালাতে পারেন?
জর্জেন থেলেন

1
@ ওমর আমি উত্তরটি সম্পাদনা করেছি: ২০০৯ সালের আনসেট ম্যান পৃষ্ঠাতে (আমি ২০০৯ সংস্করণে লিঙ্ক করেছি) এর মধ্যে একটি বিভাগ রয়েছে যা সেই একই পৃষ্ঠার বর্তমান সংস্করণে আর উপস্থিত নেই।
ভনসি

48

unsetআসলে একটি ফাংশন নয়, একটি ভাষা গঠন । এটি আর returnবা একটি এর চেয়ে বেশি কোনও ফাংশন কল নয় include

পারফরম্যান্স সমস্যাগুলি বাদ দিয়ে, unsetআপনার কোডের অভিপ্রায়টিকে আরও পরিষ্কার করে।


এজন্য আমি সর্বদা তাদের ব্যবহার করেছি, ব্যক্তিগতভাবে আমি ভেবেছিলাম যে তারা $ var = নাল থেকে ভাল দেখাচ্ছে। যাইহোক, আমি সর্বদা নুল পূর্ণ ক্যাপগুলি ব্যবহার করেছি ... তবে এখন কেন জানি না?
অ্যালেক্স

1
@ ভনসি: হ্যাঁ, আমি এটি বুঝতে পেরেছি, তবে আপনি কেন ছোট ছোট, সত্য এবং মিথ্যা ব্যবহার করতে পারেন?
অ্যালেক্স

3
@ অ্যালেক্স, আপনি আনসেট না করে এর সাথে বাছাই করতে পারেন। উদাহরণস্বরূপ "$ পরীক্ষা = 4; (আনসেট) $ পরীক্ষা;" - আশ্চর্যজনক তবে সত্য এবং এটি সেট না করে আগে $ পরীক্ষার মান প্রদান করে। নির্বিশেষে, পিএইচপি ম্যানুয়াল নিশ্চিত করে যে এটি কোনও ভাষা নির্মাণ।
থোমাসরুটটার

5
@ অ্যালেক্স: পিএসআর -2 এর জন্য সমস্ত কীওয়ার্ডের জন্য ছোট হাতের অক্ষর প্রয়োজন
Tgr

2
@ অ্যালেক্স - পিএইচপি কীওয়ার্ডগুলি কেস-সংবেদনশীল; আপনি উদাহরণস্বরূপ unsetহিসাবে বানান করতে পারে UnSeT। সম্প্রদায়টি শৈলীর বিষয় হিসাবে অল-লোয়ারকেসে সেটেল করেছে তবে অন্য ক্যাসিংগুলি এখনও কাজ করে।
মার্ক রিড

35

কোনও ভেরিয়েবলটিতে একটি আনসেট () করে আপনি মূলত 'আবর্জনা সংগ্রহের' জন্য ভেরিয়েবলটি চিহ্নিত করেছেন (পিএইচপি আসলেই একটি থাকে না, তবে উদাহরণস্বরূপ) যাতে মেমরিটি অবিলম্বে উপলব্ধ হয় না। ভেরিয়েবলটি আর ডেটা রাখে না, তবে স্ট্যাকটি বৃহত্তর আকারে থেকে যায়। নাল পদ্ধতিটি করার ফলে ডেটা ঝরে যায় এবং স্ট্যাক মেমরিটি প্রায় সাথে সাথে সঙ্কুচিত হয়।

এটি ব্যক্তিগত অভিজ্ঞতা এবং অন্যদের থেকেও হয়েছে। আনসেট () ফাংশনের মন্তব্যগুলি এখানে দেখুন

আমি ব্যক্তিগতভাবে একটি লুপে পুনরাবৃত্তির মধ্যে আনসেট () ব্যবহার করি যাতে স্ট্যাকটি ইয়ো-ইও আকারে হওয়াতে আমার বিলম্ব হয় না। ডেটা চলে গেছে, তবে পায়ের ছাপ রয়ে গেছে। পরবর্তী পুনরাবৃত্তিতে, মেমরিটি ইতিমধ্যে পিএইচপি দ্বারা নেওয়া হচ্ছে এবং এর ফলে পরবর্তী ভেরিয়েবলটি আরম্ভ করার জন্য দ্রুত।


15
NULL তে কিছু সেট করা সুবিধাজনক হতে পারে যদি NULL মান ধরে রাখার জন্য প্রয়োজনীয় মেমরিটি এর আগে যে পরিমাণ মান ধরেছিল তার চেয়ে কম রাখে। উদাহরণস্বরূপ, একটি দীর্ঘ স্ট্রিং। যদি স্ট্রিংটি ধ্রুবক না হয়ে থাকে এবং এর রেফারেন্স গণনা শূন্যে নেমে যায় তবে সেই স্মৃতিটি মুক্তি দেওয়া উচিত। আনসেটটি পরিষ্কার - এটি আর কোনও রেফারেন্স বজায় রাখে না। আবর্জনা সংগ্রহের জন্য আপনাকে অপেক্ষা করতে হবে, তবে এটি এটিকে স্মৃতিশক্তি না বলে মনে করা নিরাপদ, কারণ স্বল্প স্মৃতির শর্ত আবর্জনা সংগ্রহকে ট্রিগার করবে।
থোমাসরুটটার

আমরা উভয় ব্যবহার করতে পারি না? নাল সমান এবং তারপর আনসেট?
নাবিল খান

2
@ নাবিলখান আমি লুপের অভ্যন্তরে আনসেট () ব্যবহার করার পরামর্শ দিচ্ছি এবং তারপরে আপনি লুপটি থেকে প্রস্থান করার সময় এটিকে বাতিল করবেন। অন্যথায়, লুপের ভিতরে উভয় করার ক্ষেত্রে একটি পারফরম্যান্স প্রভাব রয়েছে। যদি আপনি লুপগুলি ব্যবহার না করে থাকেন, তবে এটি ইতিমধ্যে পর্দার পিছনে আনসেট () যুক্তিযুক্ত করে দেওয়ার কারণে এটি বাতিল করুন।
উইলিয়াম হলরয়েড

27
<?php
$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    $a = NULL;
}
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds\r\n";



$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    unset($a);
}
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds\r\n";
?>

এটি দেখে মনে হচ্ছে "= নাল" দ্রুত।

পিএইচপি 5.4 ফলাফল:

  • 0.88389301300049 সেকেন্ড সময় নিয়েছে
  • 2.1757180690765 সেকেন্ড সময় নিয়েছে

পিএইচপি 5.3 ফলাফল:

  • 1.7235369682312 সেকেন্ড সময় নিয়েছে
  • 2.9490959644318 সেকেন্ড সময় নিয়েছে

পিএইচপি 5.2 ফলাফল:

  • 3.0069220066071 সেকেন্ড সময় নিয়েছে
  • 4.7002630233765 সেকেন্ড সময় নিয়েছে

পিএইচপি 5.1 ফলাফল:

  • 2.6272349357605 সেকেন্ড সময় নিয়েছে
  • 5.0403649806976 সেকেন্ড সময় নিয়েছে

পিএইচপি 5.0 এবং 4.4 এর সাথে জিনিসগুলি পৃথক দেখা শুরু হয়।

5.0:

  • 10.038941144943 সেকেন্ড সময় নিয়েছে
  • 7.0874409675598 সেকেন্ড সময় নিয়েছে

4.4:

  • 7.5352551937103 সেকেন্ড সময় নিয়েছে
  • 6.6245851516724 সেকেন্ড সময় নিয়েছে

মনে রাখবেন মাইক্রোটাইম (সত্য) পিএইচপি ৪.৪ এ কাজ করে না তাই আমাকে পিএইচপিএন / মাইক্রোটাইম / উদাহরণ # 1 এ দেওয়া মাইক্রোটাইম_ফ্লোট উদাহরণটি ব্যবহার করতে হয়েছিল।


7
আমি মনে করি আপনার পরীক্ষাটি ত্রুটিযুক্ত। প্রথম লুপটি সরল পুনরায় নিয়োগ এবং দ্বিতীয় লুপটি একই চিহ্নটিকে ধ্বংস করে এবং পুনরায় তৈরি করে। যদি অ্যারে দিয়ে পরীক্ষা করা হয় unsetতবে দ্রুত হয়। আমার একটি পরীক্ষা আছে যা পরে unsetক্ষেত্রে অস্তিত্বের জন্য পরীক্ষা করে । সেই পরীক্ষায় এটি সেট nullকরা সামান্যতম দ্রুত। পরীক্ষা: পেস্টবিন.
com

4
@ অ্যানসুর, gc_collect_cyclesআরও সঠিক ফলাফল পেতে টাইমার শুরু করার আগে সর্বদা কল করুন ।
পেসারিয়ার

@ কিনিরি আপনি কি এর সাথে লিঙ্ক করতে পারেন?
নবেল খান

@ নাবিলখান আমার কাছে আর সেই পরীক্ষার ফলাফল নেই; তবে আমার আগের মন্তব্যে পরীক্ষার কোডের একটি লিঙ্ক রয়েছে।
কন্যারি

19

এটি অ্যারের উপাদানগুলির সাথে একটি পার্থক্য তৈরি করে।

এই উদাহরণ বিবেচনা করুন

$a = array('test' => 1);
$a['test'] = NULL;
echo "Key test ", array_key_exists('test', $a)? "exists": "does not exist";

এখানে, কী 'পরীক্ষা' এখনও বিদ্যমান। তবে, এই উদাহরণে

$a = array('test' => 1);
unset($a['test']);
echo "Key test ", array_key_exists('test', $a)? "exists": "does not exist";

কীটি আর বিদ্যমান নেই।


18

রেফারেন্স দ্বারা অনুলিপি করা ভেরিয়েবলগুলির জন্য এটি ভিন্ন উপায়ে কাজ করে:

$a = 5;
$b = &$a;
unset($b); // just say $b should not point to any variable
print $a; // 5

$a = 5;
$b = &$a;
$b = null; // rewrites value of $b (and $a)
print $a; // nothing, because $a = null

5
আমি এখন কয়েক বছর পিএইচপি কোড করে আসছি এবং আসল ভারটি উল্লেখ করার বিষয়ে "&" কখনও দেখিনি। ধন্যবাদ +1 :)
ক্রিস

1
$ A = 78; $ B $ একটি =; সেট না ($ ক); , var_dump ($ খ); // 78; var_dump ($ a); // অপরিবর্তিত ভেরিয়েবল: এ
zloctb

13

অবজেক্ট সম্পর্কিত, বিশেষত অলস-লোড দৃশ্যে, একজনকে বিবেচনা করা উচিত যে আবর্জনা সংগ্রহকারী নিষ্ক্রিয় সিপিইউ চক্রের মধ্যে চলছে, সুতরাং ধরে নেওয়া উচিত যে যখন আপনি প্রচুর পরিমাণে অল্প সময় পেনাল্টি লোড করছেন তখন আপনি সমস্যার মুখোমুখি হবেন মেমরি মুক্ত করার সমাধান করবে।

মেমরি সংগ্রহ করতে GC সক্ষম করতে সময়_নোসোস্লিপ ব্যবহার করুন। শূন্য স্থানে ভেরিয়েবল সেট করা বাঞ্ছনীয়।

প্রোডাকশন সার্ভারে পরীক্ষিত, মূলত চাকরিটি 50MB গ্রাস করেছিল এবং তারপরে এটি বন্ধ হয়ে যায়। ন্যানোস্লিপ ব্যবহারের পরে 14 এমবি ধ্রুবক মেমরি গ্রহণ ছিল।

একজনকে বলা উচিত এটি জিসি আচরণের উপর নির্ভর করে যা পিএইচপি সংস্করণ থেকে সংস্করণে পরিবর্তিত হতে পারে। তবে এটি পিএইচপি 5.3 জরিমানায় কাজ করে।

যেমন। এই নমুনা (কোডটি রূপে ভার্চুআমার্ট 2 গুগল ফিড)

for($n=0; $n<count($ids); $n++)
{
    //unset($product); //usefull for arrays
    $product = null
    if( $n % 50 == 0 )
    {
        // let GC do the memory job
        //echo "<mem>" . memory_get_usage() . "</mem>";//$ids[$n];
        time_nanosleep(0, 10000000);
    }

    $product = $productModel->getProductSingle((int)$ids[$n],true, true, true);
    ...

3

আমি এখনও এ সম্পর্কে সন্দেহ করি, তবে আমি এটি আমার স্ক্রিপ্টে চেষ্টা করেছি এবং এটি আমার অ্যাপ্লিকেশন মেমরির ব্যবহারকে কীভাবে প্রভাবিত করবে তা জানতে আমি xdebug ব্যবহার করছি। স্ক্রিপ্টটি আমার ফাংশনটিতে এভাবে সেট করা আছে:

function gen_table_data($serv, $coorp, $type, $showSql = FALSE, $table = 'ireg_idnts') {
    $sql = "SELECT COUNT(`operator`) `operator` FROM $table WHERE $serv = '$coorp'";
    if($showSql === FALSE) {
        $sql = mysql_query($sql) or die(mysql_error());
        $data = mysql_fetch_array($sql);
        return $data[0];
    } else echo $sql;
}

এবং আমি returnকোডের ঠিক আগে আনসেট যুক্ত করেছি এবং এটি আমাকে দেয়: 160200 তারপরে আমি এটি দিয়ে এটি পরিবর্তন করার চেষ্টা করি $sql = NULLএবং এটি আমাকে দেয়: 160224 :)

তবে আমি তুলনামূলক কিছু অনন্য আছে যখন আমি আনসেট () বা NULL ব্যবহার করি না, xdebug আমাকে মেমরির ব্যবহার হিসাবে 160144 দিন

সুতরাং, আমি মনে করি আনসেট () বা এনইউএল ব্যবহার করার জন্য লাইন দেওয়া আপনার আবেদনে প্রক্রিয়া যুক্ত করবে এবং আপনার কোডের সাথে অরিজিন থাকা ভাল এবং আপনি যতটা কার্যকর ব্যবহার করতে পারবেন তার পরিবর্তনশীল হ্রাস করা ভাল।

আমি ভুল হলে আমাকে সংশোধন করুন, ধন্যবাদ


আমি মনে করি আপনি যখন $ ডেটা [0] আইটেমটি ফিরছেন তখন পুরো অ্যারেটি উল্লেখ করা হয় / তবে এটি কেবল অনুমানের। স্থানীয় ভেরিয়েবলে $ ডেটা [0] অনুলিপি করার চেষ্টা করুন, অ্যারেটিকে নালায় সেট করুন এবং স্থানীয় ভেরিয়েবলটি ফেরত দিন। ভাল ব্যাকগ্রাউন্ড এখানে tuxradar.com/practicalphp/18/1/11 এবং ofcphp.net/manual/en/features.gc.php
ওএসপি

2

আমি unsetএবং এর জন্য একটি নতুন পারফরম্যান্স পরীক্ষা তৈরি করেছি =null, কারণ মন্তব্যগুলিতে এখানে যেমন লিখিত হয়েছে তেমন একটি ত্রুটি রয়েছে (উপাদানগুলি পুনরুদ্ধার)। আমি অ্যারে ব্যবহার করেছিলাম, আপনি যেমন দেখেন এখন এটি কোনও বিষয় নয়।

<?php
$arr1 = array();
$arr2 = array();
for ($i = 0; $i < 10000000; $i++) {
    $arr1[$i] = 'a';
    $arr2[$i] = 'a';
}

$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $arr1[$i] = null;
}
$elapsed = microtime(true) - $start;

echo 'took '. $elapsed .'seconds<br>';

$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    unset($arr2[$i]);
}
$elapsed = microtime(true) - $start;

echo 'took '. $elapsed .'seconds<br>';

তবে আমি এটি কেবলমাত্র একটি পিএইচপি 5.5.9 সার্ভারে পরীক্ষা করতে পারি, এখানে ফলাফলগুলি: - 4.4571571350098 সেকেন্ড সময় নিয়েছে - ৪.৪৪২৫৯97866060০৫৩ seconds সেকেন্ড সময় নিয়েছে

আমি unsetপঠনযোগ্যতার কারণে পছন্দ করি ।


2

পিএইচপি 7 ইতিমধ্যে এ জাতীয় মেমরি পরিচালনা সংক্রান্ত সমস্যা এবং এর আপ-ন্যূনতম ব্যবহারে হ্রাস পেয়েছে।

<?php
  $start = microtime(true);
  for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    $a = NULL;
  }
  $elapsed = microtime(true) - $start;

  echo "took $elapsed seconds\r\n";

  $start = microtime(true);
  for ($i = 0; $i < 10000000; $i++) {
     $a = 'a';
     unset($a);
  }
  $elapsed = microtime(true) - $start;

  echo "took $elapsed seconds\r\n";

?>

পিএইচপি 7.1 আউটপু:

0.16778993606567 সেকেন্ড সময় নিয়েছিল 0.16630101203918 সেকেন্ড


1

unsetতাত্ক্ষণিক মেমরিটি নিখরচায় না করা কোডটি এখনও খুব সহায়ক এবং আমরা কোনও পদ্ধতি থেকে বেরিয়ে আসার আগে প্রতিবার কোডের পদক্ষেপগুলিতে পাস করার পরে এটি করা ভাল অনুশীলন হবে। এটি তাত্ক্ষণিক স্মৃতি মুক্ত করার বিষয়ে নয় তা নোট করুন। তাত্ক্ষণিক মেমরি সিপিইউর জন্য, গৌণ স্মৃতি যা র‌্যাম is

এবং এটি মেমরি ফুটো প্রতিরোধ সম্পর্কেও মোকাবেলা করে।

দয়া করে এই লিঙ্কটি দেখুন http://www.hackingwithphp.com/18/1/11/be-wary-of-garbage-collection-part-2

আমি দীর্ঘদিন ধরে আনসেট ব্যবহার করছি।

ইতিমধ্যে অ্যারে হিসাবে ব্যবহার করা হয়েছে এমন সমস্ত ভেরিয়েবলটি তাত্ক্ষণিকভাবে আনসেট করার জন্য কোডের মতো আরও ভাল অনুশীলন করুন।

$data['tesst']='';
$data['test2']='asdadsa';
....
nth.

এবং just unset($data);সমস্ত পরিবর্তনশীল ব্যবহার বিনামূল্যে।

আনসেট করতে দয়া করে সম্পর্কিত বিষয় দেখুন

পিএইচপি-তে ভেরিয়েবল আনসেট করা কতটা গুরুত্বপূর্ণ?

[বাগ]


1

রেকর্ডটির জন্য, এবং এতে যে সময় লাগে তা বাদ দিয়ে:

<?php
echo "<hr>First:<br>";
$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n";      
echo memory_get_peak_usage() . "<br>\n"; 
echo "<hr>Unset:<br>";
unset($x);
$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n";      
echo memory_get_peak_usage() . "<br>\n"; 
echo "<hr>Null:<br>";
$x=null;
$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n";      
echo memory_get_peak_usage() . "<br>\n";

echo "<hr>function:<br>";
function test() {
    $x = str_repeat('x', 80000);
}
echo memory_get_usage() . "<br>\n";      
echo memory_get_peak_usage() . "<br>\n"; 

echo "<hr>Reasign:<br>";
$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n";      
echo memory_get_peak_usage() . "<br>\n"; 

এটি ফিরে আসে

First:
438296
438352
Unset:
438296
438352
Null:
438296
438352
function:
438296
438352
Reasign:
438296
520216 <-- double usage.

উপসংহার, প্রত্যাশা অনুযায়ী নাল এবং আনসেট উভয়ই ফ্রি মেমরি (কেবলমাত্র মৃত্যুদন্ডের শেষে নয়)। এছাড়াও, কোনও ভেরিয়েবলকে পুনরায় নিয়োগ করা কিছু সময় দু'বার ধরে (520216 বনাম 438352) ধরে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.