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:
$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(262144Wenn 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(104448Hashtable 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!

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

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

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..

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.

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.

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

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.

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


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

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
Chinesische Version, sehr einfach zu bedienen

Dreamweaver Mac
Visuelle Webentwicklungstools
