Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
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]