05.11.2013 Aufrufe

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Vergleich</strong> <strong>von</strong> <strong>Delphi</strong> <strong>und</strong> <strong>Visual</strong> <strong>C++</strong> - Kapitel 2B<br />

}<br />

i = 7;<br />

// Fehler, da i nur lokale<br />

// Blockgültigkeit innerhalb<br />

// der Funktion besitzt<br />

x:= 8;<br />

i:= 7;<br />

// Fehler, da i nur lokale<br />

// Blockgültigkeit innerhalb<br />

// der Prozedur besitzt<br />

end.<br />

Variable können folgenden Speicherkategorien (auch Speicherklassen genannt) angehören:<br />

V<strong>C++</strong><br />

Object Pascal<br />

auto Ja Ja<br />

extern Ja Nein<br />

register explizit Ja Nein<br />

register automatisch Ja Ja<br />

static Ja Nein<br />

Auch in Object Pascal kann "register" explizit verwendet werden, aber nur bei Funktionsdeklarationen. Die ersten drei Parameter solcherart deklarierter<br />

Funktionen übergeben ihre Werte <strong>von</strong> der Aufrufstelle zur aufgerufenen Funktion nicht über den Stack-Speicher, sondern über die CPU-Register EAX,<br />

EDX <strong>und</strong> ECX (in dieser Reihenfolge).<br />

Alle Variablen in Pascal <strong>und</strong> alle Variablen in <strong>C++</strong>, bei denen keine explizite Angabe der Speicherkategorie erfolgte, zählen bei deaktivierter<br />

Code-Optimierung zur Kategorie auto. Wenn der Gültigkeitsbereich einer Variablen verlassen wird, wird der für sie reservierte Speicher automatisch<br />

frei gegeben. Beim Verlassen einer Funktion werden deswegen auch solche lokalen Variablen automatisch wieder gelöscht.<br />

Variable, die mit extern definiert sind, weisen den Compiler an, die Variablen irgendwo anders zu suchen, in der gleichen oder in einer anderen Datei.<br />

Solche Variablen werden niemals ungültig.<br />

Mit "register" definierte Variablen weisen den Compiler an, diese, sofern möglich, in schnellen Prozessor-Registern zu halten. Solche Variablen können<br />

z.B. als schnelle Schleifen-Zähler sinnvoll verwendet werden. Bei eingeschalteter Optimierung werden explizite register-Anweisungen durch <strong>Visual</strong><br />

<strong>C++</strong> ignoriert. Der Compiler erzeugt dann, ebenso wie <strong>Delphi</strong>, selbständig Register-optimierten Code für oft benutzte Variable <strong>und</strong> Ausdrücke. D.h.<br />

Variable sind oftmals Register-Variable, ohne daß man es explizit angegeben hat. Man wird darüber auch nicht informiert, kann es höchstens durch eine<br />

Analyse des erzeugten Assembler-Codes erkennen. <strong>Delphi</strong> geht hier sogar soweit, eine Lebenszeit-Analyse ("lifetime analysis”) für Variable<br />

vorzunehmen. Wenn eine bestimmte Variable I exklusiv in einem Codeabschnitt <strong>und</strong> eine andere Variable J in einem späteren Abschnitt exklusiv<br />

verwendet wird, verwendet der Compiler ein einziges Register für I <strong>und</strong> J.<br />

http://ourworld.compuserve.com/homepages/praxisservice/kapit2b.htm (24 of 52) [19.05.2000 15:30:09]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!