Achtung: Dies ist eine historische Web-Site. Aktuell ist https://rainer.gerhards.net/ (engl) bzw https://www.rainer-gerhards.de/ (deutsch). Alle dynamischen Funktionen, Formulare etc auf dieser Seite sind abgeschaltet.
Datenschutzerklärung Impressum

 
Aug 01, 2017 - 06:47 PM


Select language
Preferred language:


Online
There are 1 unlogged user and 0 registered users online.

You can log-in or register for a user account here.

Anmeldung




 


 Log in Problems?
 New User? Sign Up!



Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Author Message
rgerhardsOffline
Post subject: Sinn der Übergabe von Arrays per Referenz  PostPosted: Nov 04, 2008 - 07:39 AM



Joined: Sep 25, 2006
Posts: 688

Status: Offline
Eine interessante Fragestellung:

> Wie groß da ist der Unterschied bezüglich Performance und
> Speicherplatzbedarf - bei Array mit maximal 200 Elementen?

Hier muss man überlegen, was eigentlich passiert.

Nehmen wir an, die Funktion, die da aufgerufen wird, macht etwas sehr Einfaches, z.B. das lineare Suchen eines Elements innerhalb des Arrays. Dann braucht sie schlimmstenfalls 200 Durchläufe, um dieses Element zu finden, wird im Mittel aber deutlich schneller sein. Nehmen wir an, dass jeder Schleifendurchlauf 3 Maschinenoperationen benötigt. Im schlimmsten Fall hast Du dann ca. 600 Maschinenoperationen für die Verarbeitung.

Nun nehmen wir an, dass das Kopieren des Arrays je Element 1 Maschinenoperation benötigt. In diesem Fall werden allein für den Aufruf ca. 200 Maschinenoperationen benötigt. Die Gesamtverarbeitungszeit beträgt somit 800 Maschinenoperationen, von denen ein Viertel vermeidbar wäre, wenn per Referenz übergeben würde. Das ist durchaus ein beachtlicher Unterschied.

Nun kann man natürlich die von mir aufgestellte konkrete Rechnung in der einen oder anderen Weise angreifen. Das war aber nur ein Beispiel. Lass es mich generell einmal so ausdrücken:

Je geringer die eigentliche Verarbeitungszeit innerhalb der Funktion ist, umso höher wiegt der durch die Wertübergabe verursachte Overhead. Im einen Extrem kann der Overhead die Gesamt-Laufzeit dominieren und im wesentlichen bestimmen. Im anderen Extrem ist der Overhead zu vernachlässigen, da die Funktion selbst entsprechend teuer ist. Prinzipiell ist der Overhead in diesem Fall aber trivial zu vermeiden und dafür müssen vom Design-Ansatz auch keine Kompromisse eingegangen werden. Daher ist die Übergabe per Referenz sinnvoll.

Es gibt genau aus diesem Grunde in allen modernen Programmiersprachen auch entsprechende Konstrukte.

Rainer
 
 View user's profile Send private message  
Reply with quote Back to top
Display posts from previous:     
Jump to:  
All times are GMT + 1 Hour
Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Powered by PNphpBB2 © 2003-2007 The PNphpBB Group
Credits
:: RSS Feed: ::
Page created in 0.14275097847 seconds.

Ferientips - das Urlaubsweb - Jan Gerhards - Ulrike Gerhards - Ulrike Gerhards Foto Site