Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Parameterübergabe (https://www.delphipraxis.net/58981-parameteruebergabe.html)

Airblader 15. Dez 2005 12:12


Parameterübergabe
 
Hi ;)
Ich wollte mal fragen, ob es besser/performanter ist, nur den Zeiger auf Variablen einer Funktion/Prozedur zu übergeben, sofern man die Variablen in dieser z.B. nur zur Fallunterscheidung benötigt (oder zur nochmaligen Weitergabe).

Praktisch:

Delphi-Quellcode:
procedure Test(var BrauchIchNich: Integer);
vs.
procedure Test(BrauchIchNich: Integer);
Es geht dabei um einige Aufrufe, wäre also gut zu wissen, ob eine Variante performanter ist und wenn ja welche (ich vermute, wenn, dann ist es die 1.)

Danke ;)

air

[edit=Luckie]Delphi-Tags korrigiert. Mfg, Luckie[/edit]

Matze 15. Dez 2005 12:25

Re: Parameterübergabe
 
Dann würde ich const nehmen. Doch ob's da bei deinen Möglichkeiten Unterschiede gibt, weiß ich nicht.

jbg 15. Dez 2005 12:27

Re: Parameterübergabe
 
Zitat:

Zitat von Airblader
ich vermute, wenn, dann ist es die 1.

Falsch vermutet.

In Assembler sieht die 1. Ungefähr so aus:
Code:
mov eax, OFFSET MyVar
push eax
call MyFunc
...

MyFunc:
push ebp
mov ebp, esp

mov eax, [ebp-$08]
mov edx, [eax]
...

Hingeben bei der 2.:
Code:
mov eax, MyVar
push eax
call MyFunc
...

MyFunc:
push ebp
mov ebp, esp

mov edx, [ebp-$08]
Der Einfachheit habe ich mal die Aufrufkonvention register nicht verwendet.
Es ist also ein Speicherzugriff weniger notwendig. Und Speicher ist verhältnismäßig langsam.

jim_raynor 15. Dez 2005 12:28

Re: Parameterübergabe
 
Sinn mach const und var nur bei Datentypen, die größer als 4Bytes sind. Zum Beispiel Records. Im Falle von const und var wird der Pointer auf die Variable übergeben, der ja auch 4 Bytes groß ist. Sinnvoll ist es nur bei Records, Strings und Arrays.

Airblader 15. Dez 2005 12:44

Re: Parameterübergabe
 
Zitat:

Zitat von jim_raynor
Sinnvoll ist es nur bei Records, Strings und Arrays.

Das ist damit die Antwort, die ich brauche (der Integer oben war ja nur ein Beispiel, es wird u.a. ein String übergeben).

Danke an alle! :)

air


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz