Mit Zeiger auf Zeiger rechnen



  • deine Ausage 1 ist vielleicht nicht ganz zutreffend, aber so kann man es sich ungefähr vorstellen.

    Frage 2: das kann man so nicht sagen. Wenn ich einen Zeiger auf einen Integer habe, ist es genauso schnell, denn das Kopieren des Inhalts des Intergers oder der Adresse der Variable genauso lange braucht (beide sind 32 Bit breit). Es macht nur einen Unterschied, wenn du z.B. ein struct übergibst: Sagen wir mal, dein struct braucht 1024 Bytes, dann muss das Programm 1024 Bytes übergeben. Wenn du nur den Zeiger lieferst, dann benötigst du nur 4 Bytes. Die Geschwindigkeit unetrscheidet sich vielleicht nur im Mirkosekunden bereich, nur der Speicher, den du für die Übergabe benötigst, ist kleiner.

    Frage 3: siehe 2. Zeiger sind kein Allheilmittel, man setzt nur dort Zeiger ein, wo man sie braucht.

    Ergänzung zu Frage 2:
    In C++ kann es durchaus einen Unterschied machen, wenn ich mich nicht irre, denn wenn du z.b. eine Klasse hast, die sehr lange braucht für die Ausführung des Kopierkonstruktors, dann ist die Übergabe über einen Zeiger eher schneller, da der Kopierkonstruktor nicht ausgeführt wird. Aber da ich kein C++ "Experte" bin, bin ich da nicht so sicher. In C ist die Aussage eher nicht zutreffend.



  • dahaack schrieb:

    Aussage: Ein Feld[8] ist nichts anderes als ein Pointer Namens Feld, der auf eine Namenlose Variable zeigt. Hinter dieser Variablen gibt es noch 7 weitere Variablen die ebenfalls keinen Namen haben. Diese können mit der Syntax Feld angesprochen werden.

    nö, ein feld[8] ist [i]kein* pointer, sondern eine variable bestehend aus 8 elementen des gleichen typs. wenn du allerdings diese variable z.b. an eine funktion übergibst, dann nimmt C automatisch die adresse des ersten elements (&feld[0]) und im funktionskopf ist ein pointer definiert, dem diese adresse beim aufruf zugewisen wird. pointer und arrays haben zwar schon eine gewisse verwandtschaft, sie sind aber nicht dasselbe.

    dahaack schrieb:

    2. Frage: Mit Pointern heißt es ja kann der Rechner schneller rechnen. Kann man somit auch mit Feldern schneller rechnen, da die nach meienr Definition ja bereits durch Pointer angesprchen werden.

    naja, jedenfalls schneller, als wenn er das ganze array kopieren würde. der zugriff auf array-elemente kann etwas langsamer sein als der zugriff auf einzelne variablen, weil zur laufzeit manchmal noch die entgültige adresse berechnet werden muss (was ja bei 'single' variablen wegfällt). aber das ist alles extrem vom code und vom compiler abhängig.

    dahaack schrieb:

    3. Frage: Ganz grob: Wie viel schneller kann ein Computer etwa mit Pointern rechnen als mit Variablen?

    falls du damit pointerarithmetik meinst: das kommt darauf an, wie breit deine pointer sind und wie der adressraum aufgebaut ist (lücken? segmentierung?) im idealfall ist pointerarithmetik ebenso schnell wie berechnungen mit normalen variablen.
    falls du damit kopieroperationen beim funktionsaufruf meinst: klar ist das kopieren eines pointers wesentlich schneller als das kopieren von z.b. 1MB an daten.
    🙂



  • Alles klar ich glaub ich hab jetzt alles gecheckt. Danke!!!


Anmelden zum Antworten