AGB  ·  Datenschutz  ·  Impressum  







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

Codedesign

Ein Thema von Luckie · begonnen am 10. Nov 2003 · letzter Beitrag vom 6. Jan 2004
 
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#34

Re: Codedesign

  Alt 14. Nov 2003, 14:27
Zitat von Luckie:
Speziell an Hagen noch mal:

Du hast auf Seite 1 oder 2 folgende Aussagen gemacht:

in den Thread hats du folgende Aussagen getroffen:
  • 3 ordinale Paramter maximal für Proceduren
  • 2 ordinale Paramter maximal für Methoden (Self ist der 3. unsichtbare Parameter)
  • register Aufrufkonvention wenn möglich
  • Result immer nur am Ende der Funktion belegen, oder vor einem Exit;
  • möglichst wenige lokale unkomplizierte Variablen
  • das Aufsplitten komplexer Funktionen auf mehrere weniger komplexe Funktion macht den Code meistens schneller, da der Optimierer besser arbeiten kann (gilt auch für nested Proceduren)
Könntest du die mir bitte noch mal erleätern / begründen? Die Hintergründe hierzu wären nicht schlecht zu erfahren. Danke.

*handheb* Wenn ich auch versuchen darf:
Zitat:
3 ordinale Paramter maximal für Proceduren
Es gibt 4 allgemeine CPU-Register: EAX, EBX, ECX und EDX. Eines davon, ich glaub EBX (oder ECX) wird vom Betriebssystem ständig verwendet, die anderen stehen dem Benutzer zur Verfügung. Wenn man nun die richtige Aufrufkonvention verwendet, nämlich register, werden so viele Parameter wie möglich in die Register geschrieben und nicht in den RAM (Stack). Bei max. 3 Parametern ist also alles im Register. Dazu ist noch zu sagen, dass es Ordinal-Typen sein sollen, oder, komplexen Dateitypen, Zeiger auf diese (deswegen auch const bzw. var). Denn in ein Register passen 4 Byte, aber kein 32-Byte-Record.
Registeraufrufe sind schneller, da Daten sowieso erst in Registern verarbeitet werden. Sind sie im Speicher, müssen sie erst in ein Register kopiert werden.

Beispiel:
(a sei Variable, also Speicheradresse)
Code:
ADD a, 10
ist eigentlich:
Code:
MOV EAX,a
ADD EAX,10
MOV a, EAX
Zitat:
2 ordinale Paramter maximal für Methoden (Self ist der 3. unsichtbare Parameter)
ergibt sich aus dem ersten, bei einer Methode wird immer ein dritter Parameter Self übergeben

Zitat:
Result immer nur am Ende der Funktion belegen, oder vor einem Exit;
Der Rückgabewert einer Funktion stehz am Ende in EAX. Wenn also nach dem Belegen des Rückgabewerts noch Aktionen ausgeführt werden, die das Regsiter EAX beanspruchen, wird das Result im Speicher abgelegt und muss am Ende in EAX kopiert werden.
Wird danach nix mehr gemacht, wird das Result sofort in EAX geschrieben und es muss nix mehr kopiert werden.

So, ich hoffe, das war soweit korrekt, aber den Rest sollte wirklich Hagen erklären
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
 


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 13:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz