Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

memory_get_usage: n*15Char-String besser als n*4Byte-Array?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 21.05.2007, 15:06

Wenn ich viele IPs in einer Variablen festhalten will, sollte man ja eigentlich annehmen, dass ein Array aus IPLongs (also den Long-Werten der IPs) viel weniger Speicher verbraucht als Strings... doch laut memory_get_usage ist dem NICHT SO.

A: EIGENTLICH verbraucht ja eine IP als String (lassen wir Unicode und Co mal aussen vor, danke ;)) max. 15 Chars aka Bytes, bspw. "123.123.123.123"

B: EIGENTLICH verbraucht ja eine IP als IPLong immer exakt 4 Bytes, bspw. 2130706400

Bildet man nun fuer A einen String, z.B. so:
"123.123.123.123 123.123.123.128"

und fuer B ein Array z.B. so:
array(2130706400, 2130706405)

und nimmt man memory_get_usage(true) zu Rate, kommt doch (Staunen!) tatsaechlich heraus, dass der String (mit einer Info-Dichte von hier z.B. 15+1+15 = 31 Chars) an Speicher SEHR VIEL WENIGER verbraucht, als das Array mit zwei 4-Byte-Long-Werten. Klar, das Array benoetigt noch einen gewissen "Overhead fuer Selbstorganisation" aber demnach ist der ja riesig!?

Man koennte nun annehmen, das ist eben bei wenigen Elementen so, da das Array "Overhead fuer Selbstorganisation" benoetigt. ABER: Die Differenz aendert sich auch NICHT wesentlich, wenn man bspw. 3000 Elemente als String bzw. als Array anlegt, der String verbraucht IMMER weniger Speicher, obgleich er doch EIGENTLICH die hoehere Informationsdichte aufweist.

Ergebnis fuer 3000 15Chars-IPs in String:
Info-Dichte EIGENTLICH: 3000*15 Chars + 3000*1 Leerzeichen: 48000 bytes
REALER SPEICHERVERBRAUCH: 60152 bytes (ca. Faktor 1,25 der Info-Dichte)

Ergebnis fuer 3000 4Byte-Long-IPs in einfachem Array:
Info-Dichte EIGENTLICH: 3000*4 Bytes: 12000 bytes
REALER SPEICHERVERBRAUCH: 184512 bytes (ca. Faktor 15 der Info-Dichte!!)

Muss man das verstehen? Ist das wieder mal ein FEATURE von PHP?
Oder ist die Messmethode get_memory_usage einfach ZU unzuverlaessig, die Testannahmen falsch, was gibt es evtl. an guten Alternativen?

Moeglich waere ja noch dass ein internes type casting stattfindet, nur sehe ich nicht wo es Sinn ergeben wuerde..
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 21.05.2007, 19:19

Schreibe ich zu technisch oder zu kompliziert oder sind alle anderen auch nur sprachlos ;-) ?
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

Anonymous

Beitrag von Anonymous » 21.05.2007, 19:45

Hmm... ich glaub deine projekte werfen gutes Geld ab... su scheinst sehr viel Zeit zu haben dich mit seltsamen Dingen zu beschäftigen... :wink:

Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 21.05.2007, 19:55

Das ist wohl ein weit verbreiteter Mythos, mehr aber auch nicht ;)

Und nein, es ist fuer ein Gratis Projekt, was auch hier vielen hilft, boese Bots vom Hals zu halten. Aber ich denke diese "bescheuerte Speicher-Management-Architektur" (oder was auch immer das sein soll) von PHP fuehrt mich geradewegs auf eine viel bessere Idee, die der Lookup Tables..
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 23.05.2007, 10:10

Vergleicht man es mit Arrays, wuerde man in PHP einen Aufzug also so bauen:

- eigentlich KOENNTE er ja 30 Personen ("Daten") befoerden (WENN er richtig konzeptioniert waere)
- man minimiert aber die Tragkraft und den Raum dadurch, dass man ihn mit dickem, dickem Stahlbeton/Blei oder sonstigem Schwerwiegenden ("Overhead") ummantelt.
- schliesslich ist der Aufzug so klein und so schwer, dass nur noch 2 Personen ("Daten") reinpassen

Keiner wird dazu etwas sagen, denn das "ist doch voellig normal", nicht wahr ;-) [ok, fuer mich nicht, aber ich bin dann wohl eine Ausnahme..]
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

firewire
PostRank 7
PostRank 7
Beiträge: 545
Registriert: 04.09.2006, 15:36
Wohnort: Darmstadt

Beitrag von firewire » 23.05.2007, 10:18

ist doch völlig normal
Auflösung Domainportfolio: barebones-shop.de; flexible-lcd.de; origami-experience.de; couponcommunity.de; chill-out-time.de; chill-out-time.com; healthboard.de; gesundheitspark-deutschland.de; gesundheitsparks-deutschland.de; gesundheitspark.de;
------------------------------------------------
1. deutsches Artikelverzeichnis mit AdSense Sharing
------------------------------------------------

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag