Heim  >  Artikel  >  Backend-Entwicklung  >  PHP unset zerstört Variablen und gibt Speicher frei

PHP unset zerstört Variablen und gibt Speicher frei

WBOY
WBOYOriginal
2016-08-08 09:21:071054Durchsuche

Die unset()-Funktion von PHP wird zum Löschen und Zerstören von Variablen verwendet. Wir können unset() verwenden, um nicht verwendete Variablen zu zerstören. Aber manchmal kann die Verwendung von unset() den von der Variablen belegten Speicher nicht zerstören! Schauen wir uns zunächst ein Beispiel an:

  1. $s=str_repeat('1',255); //Erzeuge einen String bestehend aus 255 Einsen
  2. $m=memory_get_usage(); //Den aktuell belegten Speicher abrufen
  3. unset($s);
  4. $mm=memory_get_usage(); //unset() und dann den aktuell belegten Speicher prüfen
  5. Echo$m-$mm;
  6. ?>

Geben Sie schließlich den vor unset() belegten Speicher abzüglich des nach unset() belegten Speichers aus. Wenn es sich um eine positive Zahl handelt, bedeutet dies, dass unset($s) $s aus dem Speicher zerstört hat (oder mit anderen Worten, den belegten Speicher). nachdem unset() reduziert wurde), aber unter PHP5 und Windows-Plattformen ist das Ergebnis, das ich erhalten habe: -48. Bedeutet das, dass unset($s) den von der Variablen $s belegten Speicher nicht zerstört? Nehmen wir das folgende Beispiel:

  1. $s=str_repeat('1',256); //Erzeuge einen String bestehend aus 256 Einsen
  2. $m=memory_get_usage(); //Den aktuell belegten Speicher abrufen
  3. unset($s);
  4. $mm=memory_get_usage(); //unset() und dann den aktuell belegten Speicher prüfen
  5. Echo$m-$mm;
  6. ?>

Dieses Beispiel ist fast das gleiche wie das obige Beispiel. Der einzige Unterschied besteht darin, dass $s aus 256 Einsen besteht, was eine Eins mehr ist als das erste Beispiel. Bedeutet das, dass unset($s) den von $s belegten Speicher zerstört hat?

Anhand der beiden oben genannten Beispiele können wir die folgenden Schlussfolgerungen ziehen: Schlussfolgerung 1. Die Funktion unset() kann den Speicherplatz nur dann freigeben, wenn der Variablenwert mehr als 256 Byte Speicher belegt Raum. .

Kann die Verwendung von „Unset“ Speicherplatz freigeben, solange der Variablenwert 256 überschreitet? Testen wir es mit einem anderen Beispiel:

  1. $s=str_repeat('1 ',256); //Das ist genau das Gleiche wie im zweiten Beispiel
  2. $p=&$s;
  3. $m=memory_get_usage();
  4. unset($s); //Destroy $s
  5. $mm=memory_get_usage();
  6. echo$p.'< br />';
  7. echo$m-$mm;
  8. ?>

Aktualisieren Sie die Seite. Wir sehen, dass die erste Zeile 256 Einsen enthält und die zweite Zeile -48. Es liegt auf der Hand, dass wir $s zerstört haben und $p nur eine Variable ist, die referenziert $s, das sein sollte Es gibt keinen Inhalt. Außerdem ist die Speichernutzung nach unset($s) im Vergleich zu vor unset() gestiegen! Machen wir nun das folgende Beispiel:

  1. $s=str_repeat('1' ,256); //Das ist genau das Gleiche wie im zweiten Beispiel
  2. $p=&$s;
  3. $m=memory_get_usage();
  4. $s=null //Setze $s auf null
  5. $mm=memory_get_usage();
  6. echo$p.'< br />';
  7. echo$m-$mm;
  8. ?>

Aktualisieren Sie nun die Seite. Wir sehen, dass die Ausgabe $p keinen Inhalt hat. Der Unterschied in der Speichernutzung vor und nach unset() beträgt 224, d. h. der von der Variablen belegte Speicher wurde gelöscht . $s=null kann in diesem Beispiel auch durch unset() ersetzt werden, wie folgt:

  1. $s= str_repeat ('1',256); //Das ist genau das Gleiche wie im zweiten Beispiel
  2. $p=&$s;
  3. $m=memory_get_usage();
  4. unset($s); //Destroy $s
  5. unset($p);
  6. $mm=memory_get_usage();
  7. echo $p.'
    ';
  8. echo$m-$mm;
  9. ?>

Wir zerstören sowohl $s als auch $p mit unset() und schauen uns dann den Unterschied in der Speichernutzung an 224 , was darauf hinweist, dass dadurch auch Speicher freigegeben werden kann. Dann können wir eine weitere Schlussfolgerung ziehen: Schlussfolgerung 2. Der Speicher wird nur freigegeben, wenn alle Variablen (z. B. Referenzvariablen), die auf die Variable verweisen, zerstört sind.

Ich glaube, dass nach den Beispielen in diesem Artikel jeder ein Verständnis von unset() haben sollte. Zumindest verwende ich unset(), um Speicher freizugeben, wenn die Variable dies nicht tut arbeiten.

Das Obige stellt PHP vor, das nicht zum Zerstören von Variablen und zum Freigeben von Speicher bestimmt ist, einschließlich des Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn