Analyse der PHP-Array-Speichernutzung
Wie viel Speicher wird der folgende Ansatz beanspruchen?
list($appid,$openid) = ["testcontent","test"];
Test
$m0 = memory_get_usage(); $k = range(1,200000); $m1 = memory_get_usage(); echo round(($m1-$m0)/pow(1024,2),4) ."MB\n"; foreach ($k as $i){ $n1 = "kk$i"; $n2 = "tt$i"; list($$n1,$$n2) = [$i,$i*3]; } $m2 = memory_get_usage(); echo round(($m2-$m1)/pow(1024,2),4) ."MB\n"; $m1 = memory_get_usage(); foreach ($k as $i){ $n1 = "kk$i"; $n2 = "tt$i"; $$n1 = $i+time(); $$n2 = 2*time(); } $m2 = memory_get_usage(); echo round(($m2-$m1)/pow(1024,2),4) ."MB\n";
Die Ausgabe der obigen Operation lautet wie folgt:
27.9404MB 51.3041MB 9.1553MB
Es ist ersichtlich, dass der vom Array belegte Speicher beträgt viel größer als der normalerweise zugewiesene Inhalt
Prinzip
In PHP wird der Typ long zur Darstellung von Zahlen verwendet, der Typ int wird nicht verwendet. Jeder versteht, dass PHP eine schwach typisierte Sprache ist, die den Typ der Variablen nicht unterscheidet und keine Konzepte wie int float char * hat. Werfen wir einen Blick auf die Variablen, die PHP in Zend speichert. Jede Variable in PHP ist in Zend/zend.h definiert. Ihre Struktur:
typedef struct _zval_struct zval; struct _zval_struct { /* Variable information */ zvalue_value value; /* The value 1 12字节(32位机是12,64位机需要8+4+4=16) */ zend_uint refcount__gc; /* The number of references to this value (for GC) 4字节 */ zend_uchar type; /* The active type 1字节*/ zend_uchar is_ref__gc; /* Whether this value is a reference (&) 1字节*/ };
PHP verwendet eine UNION-Struktur zum Speichern Der Wert der Variablen, d. h. zvalue_value, ist eine Union. Der von der UNION-Variablen belegte Speicher wird durch den maximalen Mitgliedsdatenraum bestimmt.
typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { /* string value */ char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; /*object value */ } zvalue_value;
Der maximale Mitgliedsdatenraum ist struct str, der Zeiger belegt 4 Bytes für *val und INT belegt 4 Bytes, also insgesamt 8 Bytes.
Der von struct zval belegte Platz beträgt 8+4+1+1 = 14 Bytes. Tatsächlich erfordern Arrays, Strings und Objekte in zval zusätzliche Speicherstrukturen, und das Array ist eine HashTable:
HashTable-Struktur ist in Zend/zend_hash.h definiert.
typedef struct _hashtable { uint nTableSize;//4 uint nTableMask;//4 uint nNumOfElements;//4 ulong nNextFreeElement;//4 Bucket *pInternalPointer; /* Used for element traversal 4*/ Bucket *pListHead;//4 Bucket *pListTail;//4 Bucket **arBuckets;//4 dtor_func_t pDestructor;//4 zend_bool persistent;//1 unsigned char nApplyCount;//1 zend_bool bApplyProtection;//1 #if ZEND_DEBUG int inconsistent;//4 #endif } HashTable;
HashTable-Struktur erfordert 39 Bytes, und jedes Array-Element wird in Bucket-Struktur gespeichert:
typedef struct bucket { ulong h; /* Used for numeric indexing 4字节 */ uint nKeyLength; /* The length of the key (for string keys) 4字节 */ void *pData; /* 4字节*/ void *pDataPtr; /* 4字节*/ struct bucket *pListNext; /* PHP arrays are ordered. This gives the next element in that order4字节*/ struct bucket *pListLast; /* and this gives the previous element 4字节 */ struct bucket *pNext; /* The next element in this (doubly) linked list 4字节*/ struct bucket *pLast; /* The previous element in this (doubly) linked list 4字节*/ char arKey[1]; /* Must be last element 1字节*/ } Bucket;
Bucket-Struktur Es erfordert 33 Bytes, und der Teil mit einer Schlüssellänge von mehr als vier Bytes wird an das Ende des Buckets angehängt, und der Elementwert ist wahrscheinlich eine zval-Struktur. Darüber hinaus wird jedem Array ein Array von Bucket-Zeigern zugewiesen, auf die arBuckets zeigt. Man kann zwar nicht sagen, dass jede Erhöhung eines Elements einen Zeiger erfordert, aber die Situation könnte schlimmer sein. Dadurch wird berechnet, dass ein Array-Element 54 Bytes belegt, was fast der obigen Schätzung entspricht.
Ein leeres Array belegt mindestens 14(zval) + 39(HashTable) + 33(arBuckets) = 86 Bytes. Als Variable sollte es eine Position in der Symboltabelle haben und ist auch ein Array-Element , also erfordert eine leere Array-Variable 118 Bytes zum Beschreiben und Speichern. Aus Platzgründen sind kleine Arrays im Durchschnitt teurer. Natürlich wird ein Skript nicht mit einer großen Anzahl kleiner Arrays gefüllt, und der Programmierkomfort kann bei geringeren Platzkosten erreicht werden. Wenn Sie jedoch ein Array als Container verwenden, sieht das anders aus. In praktischen Anwendungen stößt man häufig auf mehrdimensionale Arrays mit vielen Elementen. Beispielsweise verbraucht ein eindimensionales Array mit 10.000 Elementen ungefähr 540 KB Speicher, während ein zweidimensionales Array mit 10.000 Elementen tatsächlich 23 MB verbraucht, und kleine Arrays lohnen sich wirklich nicht.
Das obige ist der detaillierte Inhalt vonAnalyse der PHP-Array-Speichernutzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So verwenden Sie PHP-Arrays zum Generieren und Anzeigen von Diagrammen und statistischen Grafiken. PHP ist eine weit verbreitete serverseitige Skriptsprache mit leistungsstarken Datenverarbeitungs- und Grafikgenerierungsfunktionen. In der Webentwicklung müssen wir häufig Diagramme und statistische Diagramme von Daten anzeigen. Mithilfe von PHP-Arrays können wir diese Funktionen problemlos implementieren. In diesem Artikel wird die Verwendung von PHP-Arrays zum Generieren und Anzeigen von Diagrammen und statistischen Grafiken vorgestellt und relevante Codebeispiele bereitgestellt. Einführung der notwendigen Bibliotheksdateien und Stylesheets Bevor wir beginnen, müssen wir einige notwendige Bibliotheksdateien in die PHP-Datei einführen

So verwenden Sie PHP-Arrays zum Generieren dynamischer Diashows und Bildanzeigen. Diashows und Bildanzeigen sind gängige Funktionen im Webdesign und werden häufig in Szenarien wie Karussells und Galerieanzeigen verwendet. Als beliebte serverseitige Skriptsprache verfügt PHP über die Fähigkeit, Daten zu verarbeiten und dynamische HTML-Seiten zu generieren, und eignet sich sehr gut für die Erstellung dynamischer Diashows und Bildanzeigen. In diesem Artikel wird die Verwendung von PHP-Arrays zum Generieren dynamischer Diashows und Bildanzeigen vorgestellt und entsprechende Codebeispiele gegeben. Bilddaten vorbereiten Zuerst müssen wir einen Satz Bildpfaddaten vorbereiten

Zu den PHP-Array-Mittelungsfunktionen gehören: 1. array_sum(), mit dem die Summe aller Werte im Array berechnet wird. Um den Durchschnitt zu berechnen, können Sie alle Werte im Array addieren und dann durch dividieren die Anzahl der Array-Elemente; 2, array_reduce(), wird verwendet, um das Array zu iterieren und jeden Wert mit einem Anfangswert zu berechnen. 3. array_mean(), wird verwendet, um den Durchschnitt des Arrays zurückzugeben, zuerst die Summe des Arrays zu berechnen und Berechnen Sie die Anzahl der Array-Elemente und dividieren Sie dann die Summe durch die Anzahl der Array-Elemente, um den Durchschnitt zu erhalten.

Verwendung von PHP-Arrays zur Implementierung von Benutzeranmeldungs- und Berechtigungsverwaltungsfunktionen Bei der Entwicklung einer Website sind Benutzeranmeldung und Berechtigungsverwaltung eine der sehr wichtigen Funktionen. Durch die Benutzeranmeldung können wir Benutzer authentifizieren und die Sicherheit der Website schützen. Durch das Berechtigungsmanagement können die Bedienberechtigungen der Benutzer auf der Website gesteuert werden, um sicherzustellen, dass Benutzer nur auf die Funktionen zugreifen können, für die sie berechtigt sind. In diesem Artikel stellen wir vor, wie Sie PHP-Arrays verwenden, um Benutzeranmeldungs- und Berechtigungsverwaltungsfunktionen zu implementieren. Wir werden diesen Prozess anhand eines einfachen Beispiels demonstrieren. Zuerst müssen wir erstellen

PHP-Array ist eine sehr häufige Datenstruktur, die häufig während des Entwicklungsprozesses verwendet wird. Mit zunehmender Datenmenge kann die Array-Leistung jedoch zu einem Problem werden. In diesem Artikel werden einige Techniken zur Leistungsoptimierung für PHP-Arrays untersucht und spezifische Codebeispiele bereitgestellt. 1. Verwenden Sie geeignete Datenstrukturen. In PHP gibt es zusätzlich zu gewöhnlichen Arrays einige andere Datenstrukturen wie SplFixedArray, SplDoublyLinkedList usw., die in bestimmten Situationen möglicherweise eine bessere Leistung als gewöhnliche Arrays erbringen.

Das Schlüssel-Wert-Paar eines PHP-Arrays ist eine Datenstruktur, die aus einem Schlüssel und einem entsprechenden Wert besteht. Der Schlüssel ist die Kennung des Array-Elements und der Wert sind die mit dem Schlüssel verknüpften Daten. Es ermöglicht uns, Daten mithilfe von Schlüsseln als Bezeichner zu speichern und darauf zuzugreifen. Durch die Verwendung von Schlüssel-Wert-Paaren können wir Elemente im Array einfacher bedienen und verwalten, was die Programmentwicklung flexibler und effizienter macht.

So konvertieren Sie ein PHP-Array von zwei Dimensionen in ein eindimensionales Array: 1. Verwenden Sie die Schleifendurchquerung, um das zweidimensionale Array zu durchlaufen und jedes Element zum eindimensionalen Array hinzuzufügen. 2. Verwenden Sie die Funktion „array_merge“, um mehrere zusammenzuführen Arrays in ein Array, übergeben Sie das zweidimensionale Array als Parameter an die Funktion „array_merge“, um es in ein eindimensionales Array umzuwandeln. 3. Mit der Funktion „array_reduce“ können alle Werte im Array verarbeitet werden über eine Rückruffunktion und gab schließlich ein Ergebnis zurück.

Es gibt mehrere Möglichkeiten, ein Array in PHP zu ermitteln: 1. Verwenden Sie die Funktion count(), die für alle Arten von Arrays geeignet ist. Es ist jedoch zu beachten, dass die Funktion count() 0 zurückgibt, wenn der übergebene Parameter kein Array ist. Verwenden Sie die Funktion sizeof(), die eher zur Aufrechterhaltung der Kompatibilität mit anderen Programmiersprachen verwendet wird Funktionen: Durch die Verwendung einer Schleife zum Durchlaufen des Arrays wird der Zähler bei jedem Durchlaufen um 1 erhöht und schließlich die Länge des Arrays ermittelt. Benutzerdefinierte Funktionen können entsprechend den tatsächlichen Anforderungen geändert und erweitert werden, wodurch sie flexibler werden.
