kurze frage zu funktionen

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

  • kurze frage zu funktionen

    Hi Leute,

    damit ich nicht so oft wiederkehrenden code in meiner seite habe , habe ich natürlich die meisten sachen als funktionen geschrieben...

    in meinem Buch steht aber, dass zuviele funktionen einen overhead erzeugen... a. stimmt das ? b. ab wann ist das relevant ? c. was ist overhead... aber da schau ich bei wiki

    danke fürs "zuören"

  • #2
    c. ein gewisser zeitlicher und/oder speichertechnischer mehraufwand.
    a. ja
    b. selten. m.e. nie, wenn es um praktische anwendungen geht.

    Kommentar


    • #3
      Re: kurze frage zu funktionen

      Original geschrieben von bärlina


      in meinem Buch steht aber, dass zuviele funktionen einen overhead erzeugen... a. stimmt das ?
      Nicht so sehr wie immer wieder kehrender code es tun würde.
      Wenn du an 100 stellen die selben 10 Zeilen code schreibst ist es mit sicherheit
      mehr overhead als wenn du 100 mal einen verweis auf 10 zeilen code hast.
      Mal ganz abgesehen davon dass die aussage in dem buch, zu mindest ohne den
      entsprechenden kontext, sehr fragwürdig ist.

      b. ab wann ist das relevant ?
      in php gar nicht. In anderen sprachen kann es performanter sein wenn
      man bestimmte funktionen inlined.

      c. was ist overhead... aber da schau ich bei wiki
      Ein unnötiger mehr-verbrauch von resourcen, sein diese nun speicher, loc,
      laufzeit oder was auch immer.
      Vll ist ballast eine ganz gute übersetzung.

      greets
      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

      Kommentar


      • #4
        Cool...


        und vorallem Dankeschön !

        Kommentar


        • #5
          Original geschrieben von penizillin
          a. ja
          Kannst du das ausführen? Das höre ich zum ersten mal.

          greets
          Zuletzt geändert von closure; 05.11.2006, 19:23.
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            wenn ich mich nicht irre und php sich so verhält, wie man es von einer skriptsprache erwarten würde, wird bei jedem funktionsaufruf ein speicherblock reserviert, in dem z.b. die lokalen variablen u.a. abgelegt werden. dabei muss irgendwo im speicher die größe und position dieses blocks abgelegt werden, sowie die information darüber, an welcher stelle der ablauf fortgesetzt werden muss, nachdem der block abgearbeitet ist. genau das ist der (wenn auch minimale) overhead. das paradebeispiel ist stets die rekursion - alle speicherblöcke werden pro rekursionsschritt aufrechterhalten und in jedem schritt kommen neue dazu, bis die abbruchbedingung eintritt und die blöcke in umgekehrter reihenfolge freigegeben werden. daher wird oft empfohlen, iterative ansätze zu verwenden, da sie innerhalb einer funktion abarbeitet werden können.

            vielleicht kann das jemand testen, indem er von mir aus die fibonacci-zahlen oder die fakultät einer zahl rekursiv berechnet und dabei große werte übergibt. dabei würde ich einen großen (größeren als bei einer iterativen methode) speicherverbrauch erwarten.

            Kommentar


            • #7
              Hi,

              achso ok. Gut das ist ja immer so; der zustand des programms muss auf
              nem stack gesichert werden um bei nem return im programfluss weiter machen
              zu können. Meiner meinung nach kann man das aber nicht als overhead bezeichnen,
              denn dieses vorgehen ist notewendig und lässt sich nicht vermeiden. Per definition
              ist overhead aber vermeidbar. Das ist in kompilierten sprachen nicht anders.

              Der test mit den fibancci-zahlen oder der faktultät sollte negativ ausfallen,
              wenn mal die endrekursiven varianten wählt. Die betonung liegt auf "sollte".
              Ich bin mir nich sicher ob php endrekursion wegoptimiert. Es würde mich
              nicht wundern wenn das nicht der fall wäre.

              greets
              (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

              Kommentar

              Lädt...
              X