AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Optimierungsfragen zu Proceduren

Ein Thema von mr_emre_d · begonnen am 23. Aug 2008 · letzter Beitrag vom 23. Aug 2008
Antwort Antwort
mr_emre_d
(Gast)

n/a Beiträge
 
#1

Optimierungsfragen zu Proceduren

  Alt 23. Aug 2008, 05:26
Moin Moin

Guten Morgen liebe Leute

Hier ein paar Fragen meinerseits:

Bei Procedureaufrufen wird z.B. sagen wir bei
Code:
procedure doBlub( var x:string ); ...
eine Referenz, also Speicheradresse ( Pointer -> 4 Byte )
übergeben !?

Nun würde ich gerne wissen,
1. Wie groß der param bei einer normalen Procedure ala
Code:
procedure doBlub( x: string ); ...
ist bzw wie sie verwendet wird und
2. Dasselbe wie Fr.1 nur mit const
Ich denke mal, dass Konstanten auch als eine (geschützte ) Referenz verwendet werden.

Welche Varianten sind schneller ? Bei dieser Frage gehts mir nur um die Geschwindigkeit ! Also nicht was genau die Procedure machen soll oder so !!!

Ich kann mir vorstellen, dass zb
Code:
procedure doBlub( x: byte); ...
schneller läuft, bzw läufen müsste, als eine Proc. mit const, bzw var Parametern, da ein Byte ja kleiner ist als wie ein Pointer !

Und es ist wahrscheinlich sinnvoller, wenn man einen Param. , nur wenn es größer als n Pointer ist,
auch als const deklariert !? Oder

Puh ... das wars einmal

Achja: Wäre auch schön, wenn ihr mir weitere Tipps geben könnt, wie man allgemein Programme optimiert !!!

MfG Franz
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Optimierungsfragen zu Proceduren

  Alt 23. Aug 2008, 07:43
Bei Strings/WideStrings beschleundigt die Parameterübergabe ein const. Bei Records ebenfalls. Bei Datentypen < 4 Byte ist es fraglich ob nicht die "krumheit" dieser Datentypen nicht Problematisch ist bei Prozessoren/Chipsätzen die Optimal mit auf 4, besser noch auf 8 Byte ausgerichtete Strukturen arbeiten können.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#3

Re: Optimierungsfragen zu Proceduren

  Alt 23. Aug 2008, 11:16
bei call by value wird immer eine copie übergeben. das heisst i.d.r. mehr aufwand...

bei datenstrukturen, welche nicht auf das jeweilige prozessorregister optimiert sind (z.b. bei einer 8 bit maschine, mit einem 8 bit maschine, 1 int oder bei einer 16 bit maschine mit einem 16 bit compiler , 1 byte), kostet das dem prozessor meist zusätzliche taktzyklen.


bei call by reference, wird i.d.r. nur ein pointer auf die struktur übergeben, das war es. da es sich hierbei um die registergrösse handelt, mit der der prozssor am besten umgehen kann, beansprucht dies i.a.r. auch die wenigsten taktzyklen...

also, immer überlegen, ob man eine copie von einem datenbereich benötigt, und wie gross die daten denn wirklich sein sollen

wenn man ein neues programm beginnt, sollte man i.d.r. immer die nativen datentypen verwenden, welche auf dem prozessor angepasst sind... da diese i.d.r. am performantesten ablaufen. hat aber den nachteil, dass man von compilerversion und/oder prozessor andere datengrössen mit dem datentypen abbilden kann...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Optimierungsfragen zu Proceduren

  Alt 23. Aug 2008, 14:38
Moin Zusammen,

also ich habe da einen anderen Ansatz, wie ich entscheide welche Art von Parameter ich verwende.

const wird bei mir ein Parameter, wenn der Wert nur übergeben werden soll, var wenn die Prozedur den übergebenen Wert verarbeiten und ändern soll und out, wenn der Parameter nur als Rückgabewert dient.
Ein Sonderfall sind Objekte und Pointer. Hier nehme ich immer const, damit ich mir nicht versehentlich die Referenz innerhalb der Prozedur zerstöre, und ein Speicherleck erzeuge.
Für Wertparameter (also ohne const, var oder out) habe ich noch keine sinnvolle Anwendung gefunden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Optimierungsfragen zu Proceduren

  Alt 23. Aug 2008, 15:55
Zitat von Christian Seehase:
Für Wertparameter (also ohne const, var oder out) habe ich noch keine sinnvolle Anwendung gefunden.
Die gibt es aber in den Fällen, wo man einen Parameter vor der Weiterverarbeitung noch ändern muss:
Delphi-Quellcode:
// Variante A
procedure SaveIrgendwas(s:string);
begin
  s := Trim(s);
  if s <> 'then
     ....
end;

// Variante B
procedure SaveIrgendwas(const s:string);
var
  t : string;
begin
  t := Trim(s);
  if t <> 'then
     ....
end;
Ich würde auf jeden Fall die Variante A vorziehen.
Ansonsten bin ich mit allem anderen, was du geschrieben hast einig.
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#6

Re: Optimierungsfragen zu Proceduren

  Alt 23. Aug 2008, 17:18
OK, vielen dank !

Damit haben sich einige meiner Fragen geklärt

Da solls noch etwas mit Inline geben ? ( nicht inline im sinne von assemble! )
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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