2017-03-22 4 views
1

Ich möchte überprüfen, wie viel Speicher eine Gleitkommazahl in PHP5 belegt. Ich habe gelesen, dass memory_get_usage() nicht sehr zuverlässig ist.Die Größe des Floats in PHP

Ich habe es verwendet, um zu versuchen, die Größe der Gleitkommazahlen zu bestimmen, und jedes Mal, wenn ich eine neue Fließkommazahl erstelle, erhöht sich die Speicherbelegung um 168 Bytes. Ich dachte, dass dies zu groß erscheint, also ist meine Frage - wie zuverlässig ist diese Zahl? Gibt es eine bessere Möglichkeit, die Größe von Fließkommazahlen zu approximieren?

Das Betriebssystem meines Servers ist Ubuntu 14.04.

Antwort

3

memory_get_usage() gibt die Menge an Speicher zurück, die von PHP verwendet wird, um die Variablen Ihres Programms und die interne Speicherung dieser Variablen zu speichern.

Es gibt keine direkte Verbindung zwischen dem von memory_get_usage() zurückgegebenen Wert und der Speichermenge, die zum Speichern der tatsächlichen Werte verwendet wird, die von Ihrem Skript verarbeitet werden.

Da die PHP-Variablen keinen Typ haben, verwendet jede Variable eine Datenstruktur, die es ermöglicht, Werte beliebigen Typs zu speichern. Dies bedeutet, dass PHP selbst für die 1-Bit-Nutzlast eines Werts von bool eine Menge Speicher verwendet (wahrscheinlich die 168 Byte, die Sie gemessen haben).

Die Menge ist noch größer, wenn der Wert Teil eines Arrays ist, da ein Array ein komplexer Typ ist, der die Struktur und Funktionalität von Arrays, Hashes und doppelt verknüpften Listen mischt. Um die Funktionalität dieser verschiedenen Datenstrukturen bereitzustellen, hält der Array-Typ Verknüpfungen zwischen den Objekten, die er speichert, und diese Verbindungen verwenden ebenfalls Speicher.

PHP 7 verändert die Art und Weise er seine Daten speichert intern und im Durchschnitt sie die Menge des verwendeten Speichers auf etwa die Hälfte des Speichers von PHP 5.

Wenn Sie jedoch wissen wollen, verwendet wird, reduziert, wie viele Bytes verwendet werden, um den tatsächlichen Gleitkommawert zu speichern (um seinen Bereich möglicher Werte zu kennen, Fe), ist die Information in der documentation page of the float type:

die Größe eines float ist plattformabhängig, ein ein Maximum von ~ 1,8e308 mit einer Genauigkeit von ungefähr 14 Dezimalziffern ist ein üblicher Wert (das 64-Bit-IEEE-Format).

Ich nehme an "plattformabhängig" bedeutet, dass es verwendet 4 Bytes auf 32-Bit-Plattformen (die traditionelle Größe für float) und 8 Bytes auf 64-Bit- und größere Plattformen (die traditionellen double).

+0

Vielen Dank! Es ist eine Schande, dass ich nur eine PHP5-Bibliothek verwende. Ich habe versucht, meinen Prozess mit PHP7 und es ist viel schneller. Leider muss ich mich an PHP5 anpassen. Danke noch einmal! :) – MemoNick

Verwandte Themen