Heim > Backend-Entwicklung > PHP-Tutorial > Studiennotizen zu PHP-Variablen und Speicherverwaltung

Studiennotizen zu PHP-Variablen und Speicherverwaltung

高洛峰
Freigeben: 2023-03-06 14:54:02
Original
1415 Leute haben es durchsucht

1. Funktion „memory_get_usage“

int memory_get_usage ([ bool $real_usage = false ] )


Vom PHP-Skript verwendeter Speicher (ausgenommen „memory_get_usage()“) Speicher, der von der Funktion selbst belegt wird)

Der Parameter $real_usage von memory_get_usage() ist standardmäßig auf FALSE gesetzt; wenn er auf TRUE gesetzt ist, ist der erhaltene Speicherwert der von der PHP-Speicherverwaltung belegte Speicher.

//php分配到的内存
var_dump(memory_get_usage(true));
//php使用内内存
var_dump(memory_get_usage());
Nach dem Login kopieren

Ergebnis

int 262144
int 239368


Der Speicherverwaltungsmechanismus von PHP ist: Vorab einen Speicherplatz zuweisen, Wird zum Speichern von Variablen verwendet. Wenn der Speicherplatz nicht ausreicht, beantragen Sie einen neuen Speicherplatz.

memory_get_usage(true) ist der vorab zugewiesene Speicher.


Ich habe noch nie auf die Speichernutzung von PHP-Seiten geachtet. Diese Funktion sollte in Zukunft auch zur Analyse des Codes bei der Optimierung der Seite verwendet werden.


2. Variablenzuweisung und Speicher

var_dump(memory_get_usage());
 
$a = "Hello World";
var_dump(memory_get_usage());
 
$b = $a;
var_dump(memory_get_usage());
 
unset($b);
var_dump(memory_get_usage());
 
unset($a);
var_dump(memory_get_usage());
Nach dem Login kopieren

Ergebnis

int 239776
int 239912
int 240000
int 239912
int 239776


239912-239776=136

240000-239912=88


Der von $a- und $b-Zuweisungen verwendete Speicher ist unterschiedlich. Der Grund dafür ist, dass die $b-Zuweisung keinen Speicher zuweist. Diese 88 Bytes werden von der Ausgabefunktion belegt.

Außerdem wirkt sich die Zerstörung von $b nicht auf den von $a verwendeten Speicher aus. Dies ist der Grund für die Referenzzählung der Speicherverwaltung

Sie können die Beziehung zwischen Variablenzuweisung und Speicher durch Ändern klar verstehen das Beispiel

var_dump(memory_get_usage());
 
$a = "Hello World";
var_dump(memory_get_usage());
 
$b = "Hello World";
var_dump(memory_get_usage());
 
unset($b);
var_dump(memory_get_usage());
 
unset($a);
var_dump(memory_get_usage());
Nach dem Login kopieren

Ergebnis

int 239816
int 239952
int 240088
int 239952
int 239816

239952 -23 9816= 136

240088-239952=136


Darüber hinaus ähneln die Speichernutzungsregeln der Referenzzuweisung denen der direkten Zuweisung, die Beinhaltet auch die Referenzzählregeln der Speicherverwaltung


3. Der PHP-Garbage-Collection-Mechanismus ist nicht tief genug verstanden, einfach eine Funktion aufzeichnen

xdebug_debug_zval muss die xdebug-Erweiterung installieren

$a = "Hello World";
xdebug_debug_zval('a');
Nach dem Login kopieren

Output

a:

(refcount=1, is_ref=0),string 'Hello World ' (Länge=11)

refcount Die Anzahl der Variablen, die auf den Wert zeigen

is_ref gibt an, ob eine Adressreferenz vorhanden ist

Typ

Wert

Beim Zuweisen eines Werts zu einer Variablen: is_ref ist false refcount Für 1

Manuelle Adresse

Grundkenntnisse der Referenzzählung

http:/ /php.net/manual/zh/features.gc.refcounting-basics.php

Jede PHP-Variable wird in einem Variablencontainer namens „zval“ gespeichert. Ein zval-Variablencontainer enthält zusätzlich zum Typ und Wert der Variablen zwei Bytes zusätzlicher Informationen. Der erste ist „is_ref“, ein boolescher Wert, der angibt, ob diese Variable zum Referenzsatz gehört. Durch dieses Byte kann die PHP-Engine gewöhnliche Variablen von Referenzvariablen unterscheiden. Da PHP Benutzern die Verwendung benutzerdefinierter Referenzen durch die Verwendung von & ermöglicht, gibt es im zval-Variablencontainer auch einen internen Referenzzählmechanismus, um die Speichernutzung zu optimieren. Das zweite zusätzliche Byte ist „refcount“, das verwendet wird, um die Anzahl der Variablen (auch Symbole genannt) anzugeben, die auf diesen zval-Variablencontainer verweisen. Alle Symbole existieren in einer Symboltabelle, wobei jedes Symbol einen Gültigkeitsbereich (Scope) hat, das Hauptskript (z. B. das über den Browser angeforderte Skript) und jede Funktion oder Methode ebenfalls einen Gültigkeitsbereich haben.


Das obige ist der detaillierte Inhalt vonStudiennotizen zu PHP-Variablen und Speicherverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage