Maison php教程 php手册 PHP如何销毁已经过期的变量并释放内存?unset使用方法

PHP如何销毁已经过期的变量并释放内存?unset使用方法

May 26, 2016 am 08:20 AM

我们写php程序时,会用到很多变量,如果过期的变量不即时销毁,会呆用一点的内存。php提供了销毁指定的变量的函数unset(),但是有些时候,用unset()也无法销毁变量占用的内存,本文用例子来讲解unset()销毁变量。

我们先看一个例子:

<?php  
$s=str_repeat(&#39;1&#39;,255);  //产生由255个1组成的字符串  
$m=memory_get_usage();  //获取当前占用内存  
unset($s);  
$mm=memory_get_usage();  //unset()后再查看当前占用内存  
echo $m-$mm;  
?>
Copier après la connexion


最后输出unset()之前占用内存减去unset()之后占用内存,如果是正数,那么说明unset($s)已经将$s从内存中销毁(或者说,unset()之后内存占用减少了),可是我在PHP5和windows平台下,得到的结果是:-48。这是否可以说明,unset($s)并没有起到销毁变量$s所占用内存的作用呢?我们再作下面的例子:

<?php  
$s=str_repeat(&#39;1&#39;,256);  //产生由256个1组成的字符串  
$m=memory_get_usage();  //获取当前占用内存  
unset($s);  
$mm=memory_get_usage();  //unset()后再查看当前占用内存  
echo $m-$mm;  
?>
Copier après la connexion

这个例子,和上面的例子几乎相同,唯一的不同是,$s由256个1组成,即比第一个例子多了一个1,得到结果是:224。这是否可以说明,unset($s)已经将$s所占用的内存销毁了?

通过上面两个例子,我们可以得出以下结论:结论一、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

那么是不是只要变量值超过256,使用unset就可以释放内存空间呢?我们再通过一个例子来测试一下:

<?php  
$s=str_repeat(&#39;1&#39;,256);  //这和第二个例子完全相同  
$p=&$s;  
$m=memory_get_usage();  
unset($s);  //销毁$s  
$mm=memory_get_usage();  
echo $p.&#39;<br />&#39;;  
echo $m-$mm;  
?>
Copier après la connexion

刷新页面,我们看到第一行有256个1,第二行是-48,按理说我们已经销毁了$s,而$p只是引用$s的变量,应该是没有内容了,另外,unset($s)后内存占用却比unset()前增加了!现在我们再做以下的例子:

<?php  
$s=str_repeat(&#39;1&#39;,256);  //这和第二个例子完全相同  
$p=&$s;  
$m=memory_get_usage();  
$s=null;  //设置$s为null  
$mm=memory_get_usage();  
echo $p.&#39;<br />&#39;;  
echo $m-$mm;  
?>
Copier après la connexion

现在刷新页面,我们看到,输出$p已经是没有内容了,unset()前后内存占用量之差是224,即已经清除了变量占用的内存。本例中的$s=null也可以换成unset(),如下:

<?php  
$s=str_repeat(&#39;1&#39;,256);  //这和第二个例子完全相同  
$p=&$s;  
$m=memory_get_usage();  
unset($s);  //销毁$s  
unset($p);  
$mm=memory_get_usage();  
echo $p.&#39;<br />&#39;;  
echo $m-$mm;  
?>
Copier après la connexion

我们将$s和$p都使用unset()销毁,这时再看内存占用量之差也是224,说明这样也可以释放内存。那么,我们可以得到另外一条结论:结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。

相信经过本文的例子后,大家应该对unset()有所了解了,最起码,本人用unset()也是为了在变量不起作用时,释放内存。


永久链接:

转载随意!带上文章地址吧。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)