Ausweg aus dem Referenzdilemma

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von mermshaus Beitrag anzeigen
    Allerdings hast du in den Funktionsdeklarationen ein paar Referenzen vergessen und ich glaube außerdem, dass das Schreiben eher mit $a[0] = 0; geprüft werden sollte, da er sonst nicht zu "copy on write" gezwungen ist.
    Hoppla! Aber schön zu sehen, dass mal jemand mitdenkt.
    Ich habe die Änderungen bei mir eingebaut und bekomme nun folgendes Ergebnis:
    Code:
    runs: 10000
    size: 1000
    0.09898 µs - 262144 Bytes - t_
    0.75642 µs - 262144 Bytes - t_ref
    0.09707 µs - 262144 Bytes - t_hint
    0.76185 µs - 262144 Bytes - t_hint_ref
    0.09850 µs - 262144 Bytes - t_read
    0.75838 µs - 262144 Bytes - t_ref_read
    0.09799 µs - 262144 Bytes - t_hint_read
    0.75783 µs - 262144 Bytes - t_hint_ref_read
    0.75742 µs - 262144 Bytes - t_write
    0.75714 µs - 262144 Bytes - t_ref_write
    0.75930 µs - 262144 Bytes - t_hint_write
    0.76103 µs - 262144 Bytes - t_hint_ref_write
    0.75953 µs - 262144 Bytes - t_read_write
    0.76118 µs - 262144 Bytes - t_ref_read_write
    0.75907 µs - 262144 Bytes - t_hint_read_write
    0.75785 µs - 262144 Bytes - t_hint_ref_read_write
    Bei gleichem runs und size läuft das bei mir also dreimal so schnell. *flame*

    Vorläufiges Fazit: Es ist vermutlich immer eine sehr ineffiziente Idee ist, Arrays als Referenz zu übergeben.
    Ich überlasse es immer der Intelligenz des Interpreters. Nur wenn ich in einem fremden Scope das Original ändern möchte und das Original sehr groß ist, übergeb ich es als Referenz. Das mache ich nicht um Zeit zu sparen, sondern Speicher.
    Ich wußte bisher nicht, dass read-only Funktionen wie count() nicht mit Referenzen arbeiten können. Imho wirklich ein Bug, denn was nützt die RefCount-erei, wenn dann für sowas wie count() doch eine Kopie erzeugt wird.

    Kommentar


    • #17
      Zitat von mermshaus Beitrag anzeigen
      Kann man Primitive etwa gar nicht als "echte" Referenzen übergeben? Kopiert PHP die entsprechenden Daten intern trotzdem beim Aufruf hin und bei Funktionsende wieder zurück und gaukelt die entsprechende Funktionalität bloß vor?
      Zumindest bei Integers wäre das sinnvoller, als echte Referenzen anzulegen, da der Integer-Typ in PHP genauso "breit" ist wie der intern verwendete Zeigertyp (derzeit entweder 32 oder 64 Bit). Ich könnte mir das auch beim Float-Typ noch vorstellen, bei allen anderen Typen eher nicht.

      Andererseits würde ich "sinnvoll" und PHP-interner-Quellcode nicht unbedingt immer miteinander assoziieren. Es gab da in der Vergangenheit so einige Beispiele, die einem die Haare zu Kopf stehen ließen.

      *nachschieb*
      Hehe, "zu Kopf" ist was anderes als "auf'm Kopp".
      Ich wollte wohl gemeint haben: "... die einem die Haare zu Berge stehen ließen".
      .o(♪♫♬ "Im Frühtau zu Berge wir ziehn FALLERA!")
      Zuletzt geändert von fireweasel; 25.06.2009, 10:45.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #18
        Zitat von fireweasel Beitrag anzeigen
        Es gab da in der Vergangenheit so einige Beispiele, die einem die Haare zu Kopf stehen ließen.
        OffTopic:
        Wo sollten sie auch sonst sein ;-)
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar

        Lädt...
        X