Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 23.01.15 12:43 
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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if ... then 
  begin
    ...
  end
  else
  begin
    ...
  end;

und anschließend in der Form
ausblenden 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
ausblenden Delphi-Quelltext
1:
    irgendeineanweisung					

nur die voranstehenden Leerzeichen verändere z.B.
ausblenden Delphi-Quelltext
1:
 irgendeineanweisung					

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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 23.01.15 13:48 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
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.

Für diesen Beitrag haben gedankt: Mathematiker
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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

Für diesen Beitrag haben gedankt: Mathematiker
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.01.15 14:16 
user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
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?