Entwickler-Ecke
Sonstiges (Delphi) - Leerzeichen beeinflussen DCU-Länge?
Mathematiker - Fr 23.01.15 12:43
Titel: Leerzeichen beeinflussen DCU-Länge?
Hallo,
ich demonstriere vielleicht wieder mein Nichtwissen, da es jeder weiß, nur ich nicht, aber mir ist gerade etwas Merkwürdiges aufgefallen.
Kompiliere ich z.B. Texte mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ... then begin ... end else begin ... end; |
und anschließend in der Form
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if ... then begin ... end else begin ... end; |
so hat die dcu-Datei eine andere Länge, oft kürzer, aber nicht immer. Konkret wurde gerade die DCU 62 Byte kürzer, als ich das else direkt hinter das end gesetzt habe und nicht in eine neue Zeile.
Das Gleiche geschieht bei for-to-do-Schleifen, aber auch wenn ich bei
nur die voranstehenden Leerzeichen verändere z.B.
Der gleiche Effekt tritt auf, wenn eine Leerzeile entfernt oder hinzugefügt wird.
Wie ist so etwas möglich? Theoretisch muss doch der gleiche Text übersetzt werden, d.h. auch mit dem gleichen Ergebnis.
Und weiter gedacht: Das bedeutet doch, dass der gleiche Quelltext je nach Formatierung unterschiedliche Exe-Längen ergibt.
Oder ist das nur ein Effekt, der bei D5 und D7 auftrat. Aber warum?
Ich verstehe die Logik dahinter nicht. Einmal wird die Datei größer, manchmal auch kleiner, ohne dass auch nur eine Anweisung wirklich verändert wurde.
Ich bin wieder ratlos.
Mathematiker
Delete - Fr 23.01.15 13:04
Lieber Mathematiker,
das wird wohl, soweit ich das zu beurteilen vermag, an deiner alten Delphi-Version liegen. Zumindest konnte ich dieses Phänomen mit Delphi 2009 nicht nachvollziehen, während ich eben mal kurz durch mehrfaches Suchen&Ersetzen alle doppelten Leerzeichen in einfache umgewandelt und danach alle Projekte neu erzeugt hatte. Die Größe der DCU-Datei zumindest dieser einen Unit blieb im Debug- bzw. im Release-Modus stets die jeweilige, ebenso die Größe der jeweiligen Exe-Datei.
Sind denn bei dir auch die EXE-Größen unterschiedlich, wenn du lediglich Leerzeichen in deinen Units entfernst oder hinzufügst? Denn letztendlich kommt es, wenn überhaupt, auf die Größe des ausführbaren Programms in der Release-Version an, denn die ist es ja schließlich, die du eventuell weitergibst.
Mathematiker - Fr 23.01.15 13:15
Ok, vielleicht sollte ich erst einmal nachdenken, bevor ich hier etwas hineinschreibe. :autsch:
Die Ursache sind die zugeschalteten Debugger-Informationen. Nehme ich die heraus, ändert sich nichts mehr, die DCU bleibt gleichgroß.
Merkwürdig finde ich aber dennoch, dass die Debugger-Informationen diesen Einfluss haben.
Sorry für die blöde Anfrage :oops:
Mathematiker
jaenicke - Fr 23.01.15 13:48
Mathematiker hat folgendes geschrieben : |
Merkwürdig finde ich aber dennoch, dass die Debugger-Informationen diesen Einfluss haben. |
Naja, da steht drin welche Zeile zu welchem Code gehört, sonst wüsste der Debugger das ja nicht. Wenn man die saubere Variante mit dem begin und end in eigenen Zeilen nimmt, hat man zwei Zeilen mehr, so dass sich diese Information ändert.
mandras - Fr 23.01.15 14:13
Die Anfrage war definitiv nicht blöde.
Ich habe es einmal mit D6 ausprobiert und konnte feststellen, daß bei sonst gleichem Code eine Zeile mehr die DCU um 2 Byte größer macht (mit ausgeschalteter Optimierung)
Variante a:
i:=1; i:=2;
Variante b:
i:=1;
i:=2;
Dies liegt wohl daran, daß in einer DCU auch die Infos enthalten sind, die in der MAP-Datei vorkommen.
Also: Die DCU wird dann größer, wenn die Anzahl Zeilen steigt, die tatsächlich zum Maschinencode beitragen.
Einfach nur Leerzeichen/Zeilen einfügen ergab bei mir keine Änderung der DCU-Größe
Delete - Fr 23.01.15 14:16
mandras hat folgendes geschrieben : |
Also: Die DCU wird dann größer, wenn die Anzahl Zeilen steigt, die tatsächlich zum Maschinencode beitragen. |
Das entlockt mir lediglich die Frage: Na und?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!