suchen
HeimBackend-EntwicklungPHP-TutorialWas passiert, wenn unset Speicher in PHP freigibt?

Was passiert, wenn unset Speicher in PHP freigibt?

Jun 24, 2017 am 09:54 AM
phpunset内存Was ist los释放

Wird zunächst der Release-Speicher in PHP deaktiviert?

Schauen wir uns zunächst ein Beispiel an:

var_dump(memory_get_usage());
$a = "laruence";
var_dump(memory_get_usage());
unset($a);
var_dump(memory_get_usage());

Ausgabe (in Ein Auf verschiedenen PCs kann es aufgrund unterschiedlicher Systeme, PHP-Versionen und geladener Erweiterungen variieren):

int(90440)
int(90640)
int(90472

Beachten Sie, dass 90472-90440=32, also Es gibt verschiedene Schlussfolgerungen. Einige Leute sagen, dass das Unset von PHP nicht wirklich Speicher freigibt (eine große Anzahl von Strings , und einige Leute sagen sogar, dass es wirklich Speicher freigibt). dass es sinnlos ist, Speicher auf PHP-Ebene zu diskutieren.

Wird also der Speicher durch Unset freigegeben? > Wo sind diese 32 Bytes geblieben?

Zunächst einmal
müssen wir einen Gedanken brechen: PHP ist nicht wie die C-Sprache, nur die von Ihnen angezeigten Aufrufe. Die Speicherzuweisung erfolgt nur bei APIs, die sich auf die Speicherzuweisung beziehen. Mit anderen Worten: In PHP gibt es viele Speicherzuweisungsprozesse, die wir nicht sehen können.

Implizit Die Speicherzuweisungspunkte sind:

1 für
$a = "laruence";
Variablenname

und speichern Sie ihn in der Symboltabelle
2. Reservieren Sie Speicher für den Variablenwert Daher können Sie nicht nur auf das Erscheinungsbild
Zweitens schauen,
Zweifeln Sie nicht daran, dass das Unset von PHP tatsächlich Speicher freigibt (natürlich muss es auch mit Referenzen und Zählungen kombiniert werden. Für diesen Teil lesen Sie bitte meinen vorherigen Artikel, um das PHP-Prinzip der Variablentrennung/-referenz im Detail zu verstehen) , aber diese Version ist keine Version im Sinne der C-Programmierung, sie wird nicht an das Betriebssystem zurückgegeben.
Für PHP stellt es eine Reihe von Speicherverwaltungs-APIs bereit, die der C-Sprache für die Speicherzuweisung ähneln Ähnlich wie bei der C-API wird der Speicher in PHP über diese APIs verwaltet. Wenn wir emalloc aufrufen, um Speicher zu beantragen, fragt PHP nicht einfach nach Speicher, sondern fragt das Betriebssystem nach einem großer Block. Weisen Sie dann dem Antragsteller einen Teil davon zu, sodass bei der Beantragung von Speicher keine Notwendigkeit besteht, Speicher vom Betriebssystem zu beantragen, wodurch häufige Systemaufrufe vermieden werden Zum Beispiel wie folgt Beispiel:


Ausgabe:

Das heißt, wenn wir die Variable $a in definieren , PHP Es gibt keine Anwendung für neuen Speicher vom System.

int(262144)
int(262144)
int(262144
Wenn wir efree aufrufen, um Speicher freizugeben, gibt PHP den Speicher in ähnlicher Weise nicht an das Betriebssystem zurück, sondern legt diesen Speicher dort ab Die von ihm verwaltete Liste des freien Speichers ist wahrscheinlicher, ihn in die Speicher-Cache-Liste einzufügen (Postscript, einige Versionen von PHP, wie PHP5.2.4, 5.2.6, 5.2.8). Ich habe überprüft, dass beim Aufruf von get_memory_usage() die verfügbare Speicherblockgröße in der Speicher-Cache-Liste nicht subtrahiert wird, was den Anschein erweckt, dass der Speicher nach dem Deaktivieren unverändert bleibt).

Jetzt möchte ich antworten, wo diese sind 32 Bytes gehen. Wie ich gerade sagte, sind viele Speicherzuweisungsprozesse nicht explizit. Sie werden verstehen, nachdem Sie den folgenden Code gelesen haben:

Ausgabe:

90808-90808 = 0, normal, das heißt, diese 32 Bytes werden von der Ausgabefunktion belegt (genau genommen werden sie vom Ausgabeheader belegt) Ein Array, das nur zunimmt, aber niemals abnimmt

string(43) "I am php.cn"
int(90808) //赋值前
int(90976)
int(90808) //是的, 内存正常释放
Hashtable ist die Kernstruktur von PHP (um Hashtable zu verstehen, können Sie auf meinen vorherigen Artikel zum Verständnis von Arrays in PHP (Durchlaufreihenfolge) verweisen), und Arrays werden auch durch dargestellt it. und die Symboltabelle ist auch ein assoziatives Array für den folgenden Code:



Kopieren Sie den Code
Der Code lautet wie folgt:

Wir haben 100 Variablen definiert und klicken dann auf „Deaktivieren“, um die Ausgabe anzuzeigen:

    var_dump("I am www.php.cn");
    var_dump(memory_get_usage());
    $array = array_fill(1, 100, "laruence");
    foreach ($array as $key => $value) {
        ${$value . $key} = NULL;
    }
    var_dump(memory_get_usage());
    foreach ($array as $key=> $value) {
        unset(${$value . $key});
    }
    var_dump(memory_get_usage());

Wow, warum gibt es so viel weniger Speicher?

Das liegt daran für Hashtable Das heißt, bei der Definition ist es unmöglich, genügend Speicherblöcke auf einmal zuzuweisen, um eine unbekannte Anzahl von Elementen zu speichern. Daher weist PHP HashTable während der Initialisierung nur einen kleinen Teil des Speicherblocks zu und verwendet ihn dann, wenn dies der Fall ist ist nicht genug.
     string(43) "I am php.cn"
    int(93560)
    int(118848)
    int(104448

Hashtable kann dagegen nur erweitert und nicht reduziert werden. Für das obige Beispiel reichte die Symboltabelle nicht aus, also haben wir eine Erweiterung, und wenn wir diese 100 Variablen nacheinander aufheben, wird der von den Variablen belegte Speicher freigegeben (118848 – 104448), aber die Symboltabelle wurde nicht verkleinert, sodass die kleine Menge an Speicher von der Symboltabelle selbst belegt wird. .
Haben Sie nun ein vorläufiges Verständnis der Speicherverwaltung von PHP?

Das obige ist der detaillierte Inhalt vonWas passiert, wenn unset Speicher in PHP freigibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Welche Daten können in einer PHP -Sitzung gespeichert werden?Welche Daten können in einer PHP -Sitzung gespeichert werden?May 02, 2025 am 12:17 AM

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

Wie starten Sie eine PHP -Sitzung?Wie starten Sie eine PHP -Sitzung?May 02, 2025 am 12:16 AM

TostartaphpSession, useSession_start () atthescript'Sbeginning.1) PlaCEITBEFOREANYOUTPUTTOTHESESSIONSCOOKIE.2) useSsionsforuserDatalikeloginStatusOrShopingCarts

Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?May 02, 2025 am 12:15 AM

Die Sitzung der Sitzung bezieht sich auf die Generierung einer neuen Sitzungs -ID und die Ungültigmachung der alten ID, wenn der Benutzer sensible Vorgänge bei festgelegten Sitzungsangriffen ausführt. Die Implementierungsschritte umfassen: 1. Erkennen sensibler Vorgänge, 2. Erstellen neuer Sitzungs-ID, 3..

Was sind einige Leistungsüberlegungen bei der Verwendung von PHP -Sitzungen?Was sind einige Leistungsüberlegungen bei der Verwendung von PHP -Sitzungen?May 02, 2025 am 12:11 AM

PHP -Sitzungen haben erhebliche Auswirkungen auf die Anwendungsleistung. Zu den Optimierungsmethoden gehören: 1. Verwenden Sie eine Datenbank, um Sitzungsdaten zu speichern, um die Antwortgeschwindigkeit zu verbessern; 2. Reduzieren Sie die Verwendung von Sitzungsdaten und speichern Sie nur die erforderlichen Informationen. 3.. Verwenden Sie einen nicht blockierenden Sitzungsprozessor, um die Parallelitätsfunktionen zu verbessern. 4. Passen Sie die Ablaufzeit der Sitzung an, um Benutzererfahrung und Serverbelastung auszugleichen. 5. Verwenden Sie persistente Sitzungen, um die Anzahl der Les- und Schreibzeiten zu verringern.

Wie unterscheiden sich PHP -Sitzungen von Cookies?Wie unterscheiden sich PHP -Sitzungen von Cookies?May 02, 2025 am 12:03 AM

PhpSessionsaresServer-Side, whilecookiesareclient-Side.1) SESSIsions Storedataontheserver, Aremoresecure und Handlelargerdata.2) CookieStoredataoneTheClient, AslosenSecure und LimitedInsiesindaSsibilitäts- und -Stasibilitäts- und -Stasibilitäts- und -Anssibilitäts- und -Anssibilitätsporsedataandcookiesefornonsesibel, adailliertes, adailliertes, adailliertes, adailliertes, adailliertes, addiertes-addiertes- und -Staillieren- und -Anssistieren, und -Anssibilitätsporsedaten- und -Sta- und addierta und -Anssibilitäts- und addiertes- und addailliert.

Wie identifiziert PHP die Sitzung eines Benutzers?Wie identifiziert PHP die Sitzung eines Benutzers?May 01, 2025 am 12:23 AM

PhpidentifiesAsersSSessionUsingSSessionCookiesAndSessionIDs.1) WHANE Session_Start () iscalled, phpGeneratesAuniqueSessionIDStoredInacookienMamePhpSsidontonTheusers.2) thisidallowStoretrieVessionDataFromtheServer.

Was sind einige Best Practices für die Sicherung von PHP -Sitzungen?Was sind einige Best Practices für die Sicherung von PHP -Sitzungen?May 01, 2025 am 12:22 AM

Die Sicherheit von PHP -Sitzungen kann durch folgende Maßnahmen erreicht werden: 1. Verwenden Sie Session_regenerate_id (), um die Sitzungs -ID zu regenerieren, wenn sich der Benutzer anmeldet oder eine wichtige Operation ist. 2. Verschlüsseln Sie die Übertragungssitz -ID durch das HTTPS -Protokoll. A. Verwenden Sie Session_save_path (), um das sichere Verzeichnis anzugeben, um Sitzungsdaten zu speichern und Berechtigungen korrekt festzulegen.

Wo werden standardmäßig PHP -Sitzungsdateien gespeichert?Wo werden standardmäßig PHP -Sitzungsdateien gespeichert?May 01, 2025 am 12:15 AM

PhpSessionFilesArestoredinTHedRectorySpecifiedBySession.save_path, typischerweise/tmponunix-likesystemsorc: \ windows \ temponwindows

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools