Discussion:
Delphi 5 versus 10.1
(zu alt für eine Antwort)
Jakob Achterndiek
2017-02-28 10:38:57 UTC
Permalink
Hallo,
ein Programm, das ich entwickle, wird mit vollständig identischem
Programm-Code einmal mit Delpjhi 5 prof und einmal mit Delphi 10.1
Studio kompiliert. Beide greifen über unterschiedliche Versionen von
MicroOLAP DAC auf mySQL zu. Die beiden Exe-Dateien sind dann die eine
retwa 1 MB, die andere 4 MB groß. Klar: Das ist der Fortschritt ;) Aber
meine Frage: Kann ich den mit irgendwelchen Einstellungen im Studio noch
ein bißchen reduzieren?
--
j/\a
Stefan M. Huber
2017-02-28 11:25:43 UTC
Permalink
Post by Jakob Achterndiek
Hallo,
ein Programm, das ich entwickle, wird mit vollständig identischem
Programm-Code einmal mit Delpjhi 5 prof und einmal mit Delphi 10.1
Studio kompiliert. Beide greifen über unterschiedliche Versionen von
MicroOLAP DAC auf mySQL zu. Die beiden Exe-Dateien sind dann die eine
retwa 1 MB, die andere 4 MB groß. Klar: Das ist der Fortschritt ;) Aber
meine Frage: Kann ich den mit irgendwelchen Einstellungen im Studio noch
ein bißchen reduzieren?
Du kannst die Debugsymbole rausnehmen (In den Projektoptionen unter
Compiler > Compilieren > Debuggen)

Sonst fällt mir nix ein.

Aber ehrlich: 4MB - Handkuss :)

Stefan
Jakob Achterndiek
2017-03-01 10:25:55 UTC
Permalink
Post by Stefan M. Huber
Post by Jakob Achterndiek
Hallo,
ein Programm, das ich entwickle, wird mit vollständig identischem
Programm-Code einmal mit Delpjhi 5 prof und einmal mit Delphi 10.1
Studio kompiliert. Beide greifen über unterschiedliche Versionen von
MicroOLAP DAC auf mySQL zu. Die beiden Exe-Dateien sind dann die eine
retwa 1 MB, die andere 4 MB groß. Klar: Das ist der Fortschritt ;) Aber
meine Frage: Kann ich den mit irgendwelchen Einstellungen im Studio noch
ein bißchen reduzieren?
Du kannst die Debugsymbole rausnehmen (In den Projektoptionen unter
Compiler > Compilieren > Debuggen)
Sonst fällt mir nix ein.
Aber ehrlich: 4MB - Handkuss :)
Danke für den Hinweis.
Das ergibt bei mir noch keinen Unterschied. Ich werde also weiter damit
spielen. Mich stört ja die Größe nicht, aber verwundert bin ich doch.

Gruß
j/\a
Marc Santhoff
2017-03-01 20:31:10 UTC
Permalink
Post by Jakob Achterndiek
Post by Stefan M. Huber
Post by Jakob Achterndiek
Hallo,
ein Programm, das ich entwickle, wird mit vollständig identischem
Programm-Code einmal mit Delpjhi 5 prof und einmal mit Delphi 10.1
Studio kompiliert. Beide greifen über unterschiedliche Versionen
von MicroOLAP DAC auf mySQL zu. Die beiden Exe-Dateien sind dann
die eine retwa 1 MB, die andere 4 MB groß. Klar: Das ist der
Fortschritt ;) Aber meine Frage: Kann ich den mit irgendwelchen
Einstellungen im Studio noch ein bißchen reduzieren?
Du kannst die Debugsymbole rausnehmen (In den Projektoptionen unter
Compiler > Compilieren > Debuggen)
Sonst fällt mir nix ein.
Aber ehrlich: 4MB - Handkuss :)
Danke für den Hinweis.
Das ergibt bei mir noch keinen Unterschied. Ich werde also weiter
damit spielen. Mich stört ja die Größe nicht, aber verwundert bin ich
doch.
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5 und
D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine zusätzliche
Größenverdopplung durch den Schritt von 32 Bit zu 64 Bit

OK, Milchmädchenrechnung, aber dürfte ein Faktor sein.

Marc
Jakob Achterndiek
2017-03-01 21:11:40 UTC
Permalink
Post by Marc Santhoff
Hallo, ein Programm, das ich entwickle, wird mit vollständig
identischem Programm-Code einmal mit Delpjhi 5 prof und einmal
mit Delphi 10.1 Studio kompiliert. Beide greifen über
unterschiedliche Versionen von MicroOLAP DAC auf mySQL zu. Die
beiden Exe-Dateien sind dann die eine retwa 1 MB, die andere 4
Kann ich den mit irgendwelchen Einstellungen im Studio noch ein
bißchen reduzieren?
[..]
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5
und D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine
zusätzliche Größenverdopplung durch den Schritt von 32 Bit zu 64 Bit
OK, Milchmädchenrechnung, aber dürfte ein Faktor sein.
Danke, das leuchtet mir sogar ein.
Ich stelle mir jetzt vor, daß alle Adressen, die der Compiler berechnet,
jetzt in doppelter Breite für einen doppelt breiten Adressbus angegeben
werden müssen. Oder ist das wieder ein gar zu laienhafter Gedanke?
Mein Haus- und Hofrechner arbeitet allerdings noch mit 32 Bit. Aber
darauf kommt es wohl nicht an.
--
j/\a
Marc Santhoff
2017-03-01 21:24:30 UTC
Permalink
Post by Jakob Achterndiek
Post by Marc Santhoff
Hallo, ein Programm, das ich entwickle, wird mit vollständig
identischem Programm-Code einmal mit Delpjhi 5 prof und einmal
mit Delphi 10.1 Studio kompiliert. Beide greifen über
unterschiedliche Versionen von MicroOLAP DAC auf mySQL zu. Die
beiden Exe-Dateien sind dann die eine retwa 1 MB, die andere 4
Kann ich den mit irgendwelchen Einstellungen im Studio noch ein
bißchen reduzieren?
[..]
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5
und D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine
zusätzliche Größenverdopplung durch den Schritt von 32 Bit zu 64
Bit OK, Milchmädchenrechnung, aber dürfte ein Faktor sein.
Danke, das leuchtet mir sogar ein.
Ich stelle mir jetzt vor, daß alle Adressen, die der Compiler
berechnet, jetzt in doppelter Breite für einen doppelt breiten
Adressbus angegeben werden müssen. Oder ist das wieder ein gar zu
laienhafter Gedanke? Mein Haus- und Hofrechner arbeitet allerdings
noch mit 32 Bit. Aber darauf kommt es wohl nicht an.
Daten. Doppelte Breite gibt es beim Datenbus.

Wie das dann umgesetzt wird ist natürlich eine frage des Compilers und
der Effizienz der Addressierungsarten des jeweiligen Prozessors.
Also wie kleienre datentypen wie Byte auf 64 Bit-adressierten
Speicher abgebildet werden (Stichwort Alignment). Dürfte in Delphi's
Doku stehen, ob "integer" noch 32 bit groß ist und wie die anderen Typen
umgesetzt werden. Cardinal sollte eigentlich 64 Bit breit sein, ist
aber aus historischen Gründen nicht, deswegen gibt es int64 o.ä. Usw.

Der Adressbus ist in seiner Größte abhängig von der Größe des
anzusprechenden Speichers. Sicher wird auch das mittlerweile mehr sein
als 24 bzw. 32 Bit, weiß ich aber nicht aus dem Kopf.

Rechne doch mal, 8, 16, 32 GByte RAM, wieviele Adressleitungen braucht
man da?

Marc
Jakob Achterndiek
2017-03-01 22:45:35 UTC
Permalink
Post by Marc Santhoff
Post by Jakob Achterndiek
Post by Marc Santhoff
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5
und D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine
zusätzliche Größenverdopplung durch den Schritt von 32 Bit zu 64
Bit OK, Milchmädchenrechnung, aber dürfte ein Faktor sein.
Danke, das leuchtet mir sogar ein.
Ich stelle mir jetzt vor, daß alle Adressen, [..]
Daten. Doppelte Breite gibt es beim Datenbus.
[..]
Ich glaube, jetzt geht mir ein Licht auf. Danke also.
Da werde ich mich noch mal in die Grundlagen reinknien.

Gruß
j/\a
Hans-Peter Diettrich
2017-03-02 06:35:16 UTC
Permalink
Post by Jakob Achterndiek
Post by Marc Santhoff
Post by Jakob Achterndiek
Post by Marc Santhoff
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5
und D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine
zusätzliche Größenverdopplung durch den Schritt von 32 Bit zu 64
Bit OK, Milchmädchenrechnung, aber dürfte ein Faktor sein.
Danke, das leuchtet mir sogar ein.
Ich stelle mir jetzt vor, daß alle Adressen, [..]
Daten. Doppelte Breite gibt es beim Datenbus.
[..]
Die Breite des Datenbus hat nur etwas mit der Zugriffsgeschwindigkeit zu
tun - bei größerer Breite können mehr Bytes in einem Takt übertragen
werden. Das war bei den alten Prozessoren ganz deutlich zu bemerken, da
hat sich die Rechenzeit etwa proportional zur Verbreiterung des Datenbus
reduziert.

Ähnlich beim Adressbus, da müssen die Adressen in einem 64 Bit Programm
immer mit 64 Bit Breite angegeben werden, auch wenn der Prozessor
weniger Adressleitungen hat. Deshalb werden seit Urzeiten Register zum
speichern von Adressene benutzt, auf die bei Zugriffen kürzere Offsets
addiert werden können - im Befehl steht dann nur noch der kurze Offset,
nicht die vollständige Adresse.
Post by Jakob Achterndiek
Ich glaube, jetzt geht mir ein Licht auf. Danke also.
Da werde ich mich noch mal in die Grundlagen reinknien.
Wozu willst Du Dir diese Arbeit machen? Den ausführbaren Code erzeugt
der Compiler, und *den* müßtest Du dazu bringen, kürzeren Code zu
erzeugen. Das wird dann aber so undurchsichtig, wie man das
bewerkstelligen könnte, daß es die Arbeit kaum wert ist. Und der nächste
Compiler reagiert vielleicht wieder ganz anders auf solche
Optimierungsversuche.


Was die Programmgröße betrifft, da brauchen Unicode Strings doppelt so
viel Speicherplatz wie AnsiStrings (in D5). Da *könnte* man durch eine
explizite Vorgabe von AnsiString statt String etwas Platz sparen, aber
leider nur auf Kosten von Rechenzeit, da intern (Programm und System)
fast nur noch Unicode Strings benutzt werden.

IMO läßt sich am einfachsten Speicherplatz sparen, wenn man die
ExtendedRTTI abschaltet, und das ist in Delphi sehr mühsam :-(

DoDi
Sieghard Schicktanz
2017-03-02 19:38:57 UTC
Permalink
Hallo Hans-Peter,
Post by Hans-Peter Diettrich
Die Breite des Datenbus hat nur etwas mit der Zugriffsgeschwindigkeit zu
tun - bei größerer Breite können mehr Bytes in einem Takt übertragen
werden. Das war bei den alten Prozessoren ganz deutlich zu bemerken, da
hat sich die Rechenzeit etwa proportional zur Verbreiterung des Datenbus
reduziert.
Und Du bist Dir auch ganz sicher, daß das die Ursache ist und nicht evtl.
die meistens parallel vorgenommene Erhöhung der Taktrate oder inzwischen der
Anzahl der Prozessor-Kerne? Gib' mal ein paar Belege dafür an.
Post by Hans-Peter Diettrich
Ähnlich beim Adressbus, da müssen die Adressen in einem 64 Bit Programm
immer mit 64 Bit Breite angegeben werden, auch wenn der Prozessor weniger
Adressleitungen hat. Deshalb werden seit Urzeiten Register zum speichern
...
Post by Hans-Peter Diettrich
Post by Jakob Achterndiek
Da werde ich mich noch mal in die Grundlagen reinknien.
Wozu willst Du Dir diese Arbeit machen? ...
Vielleicht, um solche Fehleinschätzungen zu vermeiden, wie Du sie oben
präsentierst? Das könnte immerhin dazu gut sein, daß jemand, der sich
besser auskennt, auch leichter erkennt, wenn er ungünstig arbeitet.
Vielleicht kommt derjenige auch mal dazu, sich professionell mit diesen
Dingen zu befassen und kann durch sein Verständnis Verbesserungen
einbringen?
Post by Hans-Peter Diettrich
IMO läßt sich am einfachsten Speicherplatz sparen, wenn man die
ExtendedRTTI abschaltet, und das ist in Delphi sehr mühsam :-(
Die Speicherplatzproblematik kommt halt auch von den immer umfassender
ausgelegten (und auszulegenden) _Objekt_-Bibliotheken, bei denen sich die
Prograsmmierwerkzeuge immer schwerer tun, nicht gebrauchtes und unbenutztes
aus dem Code auszufiltern, trotz (angeblich?) immer besserer Optimierung.
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Hans-Peter Diettrich
2017-03-03 03:04:34 UTC
Permalink
Post by Sieghard Schicktanz
Hallo Hans-Peter,
Post by Hans-Peter Diettrich
Die Breite des Datenbus hat nur etwas mit der Zugriffsgeschwindigkeit zu
tun - bei größerer Breite können mehr Bytes in einem Takt übertragen
werden. Das war bei den alten Prozessoren ganz deutlich zu bemerken, da
hat sich die Rechenzeit etwa proportional zur Verbreiterung des Datenbus
reduziert.
Und Du bist Dir auch ganz sicher, daß das die Ursache ist und nicht evtl.
die meistens parallel vorgenommene Erhöhung der Taktrate oder inzwischen der
Anzahl der Prozessor-Kerne? Gib' mal ein paar Belege dafür an.
Damals stieg die Busbreite schneller als die Taktraten, da war die
Ursache schon mit einer Stopuhr zu ermitteln. Kerne, Register-Renaming
und anderes Gedöns kamen erst später, da optimierte dann ein Compiler
meist besser als ein Assembler-Programmierer.
Post by Sieghard Schicktanz
Post by Hans-Peter Diettrich
Post by Jakob Achterndiek
Da werde ich mich noch mal in die Grundlagen reinknien.
Wozu willst Du Dir diese Arbeit machen? ...
Vielleicht, um solche Fehleinschätzungen zu vermeiden, wie Du sie oben
präsentierst?
Ach, noch ein Fachmann, der's besser weiß? ;-)
Post by Sieghard Schicktanz
Das könnte immerhin dazu gut sein, daß jemand, der sich
besser auskennt, auch leichter erkennt, wenn er ungünstig arbeitet.
Vielleicht kommt derjenige auch mal dazu, sich professionell mit diesen
Dingen zu befassen und kann durch sein Verständnis Verbesserungen
einbringen?
Ich warte immer noch auf solche Fachleute und ihre Beiträge :-]

DoDi
Matthias Frey
2017-03-03 09:05:58 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
Das könnte immerhin dazu gut sein, daß jemand, der sich
besser auskennt, auch leichter erkennt, wenn er ungünstig arbeitet.
Vielleicht kommt derjenige auch mal dazu, sich professionell mit diesen
Dingen zu befassen und kann durch sein Verständnis Verbesserungen
einbringen?
Ich warte immer noch auf solche Fachleute und ihre Beiträge :-]
Hier! ;-)

Also dann mal ...

1.
http://clean-code-developer.de/die-grade/roter-grad/#Vorsicht_vor_Optimierungen
"Rules of Optimization:
Rule 1: Don’t do it.
Rule 2 (for experts only): Don’t do it yet."

2. Wenn man es nicht unbedingt braucht sollte man in Delphi
unter 32-Bit kompilieren und nicht 64-Bit.
Es ist ein weitverbreitetes Missverständnis dass mit 64-Bit
alles schneller ginge. Oft ist das Gegenteil der Fall.
Post by Hans-Peter Diettrich
DoDi
Matthias
Sieghard Schicktanz
2017-03-03 22:26:26 UTC
Permalink
Hallo Hans-Peter,

Du schriebst am Fri, 3 Mar 2017 04:04:34 +0100:

[Breite des Datenbus vs. Zugriffsgeschwindigkeit]
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
Und Du bist Dir auch ganz sicher, daß das die Ursache ist und nicht
...
Post by Hans-Peter Diettrich
Damals stieg die Busbreite schneller als die Taktraten, da war die
Hmm. Also ich weiß nur von _2_, dann allerdings sprunghaften, Anstiegen der
Busbreite "damals", von 8 auf 16 und später von 16 auf 32 Bit. Anstiege der
Taktrate gab es aber relativ kontinuierlich laufend, und zusätzlich jeweils
bei der Einführung einer neuen Busbreite einen gehörigen "Zuschuß".
Post by Hans-Peter Diettrich
Ursache schon mit einer Stopuhr zu ermitteln. Kerne, Register-Renaming
Habe ich anders in Erinnerung, da gab es eher öfters Klagen, daß die
Programme mit der größeren Bus- und damit i.a. auch Datenbreite _langsamer_
(und natürlich viel größer) waren als früher bzw. als dem Taktzuwachs
entsprechen müßte.
Post by Hans-Peter Diettrich
und anderes Gedöns kamen erst später, da optimierte dann ein Compiler
meist besser als ein Assembler-Programmierer.
"Damals"? Daß ein _Compiler_ besser optimieren sollte als ein Programmierer
ist eine Behauptung der Hersteller, die noch garnicht so alt ist - sie kam
so in etwa mit den späten RISC-Prozessoren auf, deren Befehlsabarbeitung
teilweise enorm verzwickt lief und völlig uneinsichtige Befehlsfolgen
verlangte (z.B. wurde der Befehl _hinter_ einem Sprung noch ausgeführt,
bevor es am Ziel weiterging). Einigermaßen akzeptabel ist dieser Anspruch
wohl bei den neuen hochkomplexen Prozessoren, die eigentlich Interpretatoren
für eine externe Pseudo-"Maschinensprache" sind, die beim Laden mittels
mikroprogrammierter Programmfunktionen verarbeitet werden. Da blickt dann
kaum noch wer durch, was bei einer Befehlssequenz intern eigentlich abgeht.

Neben bisserl PC-Programmierung (meistens Pascal, leider "Delphi no more",
ist für Kleinkram unbezahlbar geworden und läuft immer noch ausschließlich
auf Windows, während ich das eher für Linux brauche) ist mein Hauptgebiet
eher die Mikrocontroller-Programmierung. Da sind dann die (C-) Compiler
i.a. dermaßen katastrophal beim Optimieren, daß es einem die Haare
aufstellt, und durch die Implementation der Hochsprache müssen da
Konstrukte verwendet werden, die auch eine maximal mögliche Optimierung
gegenüber einer direkten Programmierung in Assembler miserabel aussehen
lassen. Leider verhindern die Hersteller zunehmend die Assembler-
Programmierung, indem sie ihre Bibliotheken nur noch für ihre (C-) Compiler
zur Verfügung stellen und diese dann so auslegen, daß eine Einbindung in
Assembler-Programme praktisch unmöglich wird.
(Läuft derzeit bei Microchip so. Der Assembler, auf dem ich mein Multi-
Threading-System aufgebaut habe, ist mit seinem Objekt-Format inkompatibel
zu den neuen C-Compilern, und diese bieten praktisch keine nutzbare
Assembler-Programmiermöglichkeit mehr.)
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
Vielleicht, um solche Fehleinschätzungen zu vermeiden, wie Du sie oben
präsentierst?
Ach, noch ein Fachmann, der's besser weiß? ;-)
Nee, besserwissen tust doch alles Du.
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
Vielleicht kommt derjenige auch mal dazu, sich professionell mit diesen
Dingen zu befassen und kann durch sein Verständnis Verbesserungen
einbringen?
Ich warte immer noch auf solche Fachleute und ihre Beiträge :-]
Du wirst sie nie finden, wenn Du sie nicht erkennst...
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Hans-Peter Diettrich
2017-03-04 07:06:43 UTC
Permalink
Post by Sieghard Schicktanz
Hallo Hans-Peter,
[Breite des Datenbus vs. Zugriffsgeschwindigkeit]
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
Und Du bist Dir auch ganz sicher, daß das die Ursache ist und nicht
...
Post by Hans-Peter Diettrich
Damals stieg die Busbreite schneller als die Taktraten, da war die
Hmm. Also ich weiß nur von _2_, dann allerdings sprunghaften, Anstiegen der
Busbreite "damals", von 8 auf 16 und später von 16 auf 32 Bit.
Das war es, was ich meinte.
Post by Sieghard Schicktanz
Habe ich anders in Erinnerung, da gab es eher öfters Klagen, daß die
Programme mit der größeren Bus- und damit i.a. auch Datenbreite _langsamer_
(und natürlich viel größer) waren als früher bzw. als dem Taktzuwachs
entsprechen müßte.
Zu der Zeit waren die wildesten Gerüchte im Umlauf, und viele Benutzer
haben ihrem System einfach zu wenig RAM spendiert, so daß es ständig am
Swappen war. Die Busbreite hat mit der Datenbreite (Registergröße)
nichts zu tun.
Post by Sieghard Schicktanz
Post by Hans-Peter Diettrich
und anderes Gedöns kamen erst später, da optimierte dann ein Compiler
meist besser als ein Assembler-Programmierer.
"Damals"? Daß ein _Compiler_ besser optimieren sollte als ein Programmierer
ist eine Behauptung der Hersteller, die noch garnicht so alt ist
Habe ich selbst nachgeprüft, trifft vor allem auf Intel-Prozessoren
(CISC) zu.
Post by Sieghard Schicktanz
Neben bisserl PC-Programmierung (meistens Pascal, leider "Delphi no more",
ist für Kleinkram unbezahlbar geworden und läuft immer noch ausschließlich
auf Windows, während ich das eher für Linux brauche) ist mein Hauptgebiet
eher die Mikrocontroller-Programmierung. Da sind dann die (C-) Compiler
i.a. dermaßen katastrophal beim Optimieren, daß es einem die Haare
aufstellt, und durch die Implementation der Hochsprache müssen da
Konstrukte verwendet werden, die auch eine maximal mögliche Optimierung
gegenüber einer direkten Programmierung in Assembler miserabel aussehen
lassen.
Ich bin vom avr-gcc höchst beeindruckt, was die Optimierung betrifft :-)

DoDi
Sieghard Schicktanz
2017-03-05 20:34:41 UTC
Permalink
Hallo Hans-Peter,

Du schriebst am Sat, 4 Mar 2017 08:06:43 +0100:

[Busbreite]
Post by Hans-Peter Diettrich
Zu der Zeit waren die wildesten Gerüchte im Umlauf, und viele Benutzer
haben ihrem System einfach zu wenig RAM spendiert, so daß es ständig am
Gerüchteweise sollen manche Systeme garnicht ausreichend RAM nutzen haben
können. Und RAM war damals durchaus ein Kostenfaktor, bei dem man sich
schon Gedanken machen mußte. Außerdem halte ich auch heute noch die - imemr
noch - zunehmende rückhaltlose Ressourcen-Verschwendung für falsch.
Post by Hans-Peter Diettrich
Swappen war. Die Busbreite hat mit der Datenbreite (Registergröße) nichts
zu tun.
Bei den ersten Schritten schon - vor allem bei 16 -> 32Bit schnellten die
"normalen" Größen der Datenwerte nach oben. Die
Verarbeitungsgeschwindigkeit für die größeren Datentypen stieg, die für die
kleineren ging eher zurück, relativ wenigstens.

[Compileroptimierung]
Post by Hans-Peter Diettrich
Post by Sieghard Schicktanz
"Damals"? Daß ein _Compiler_ besser optimieren sollte als ein
Programmierer ist eine Behauptung der Hersteller, die noch garnicht so
alt ist
Habe ich selbst nachgeprüft, trifft vor allem auf Intel-Prozessoren
(CISC) zu.
Ab Pentium wahrscheinlich möglich, vorher eher nicht, jedenfalls nicht bei
üblicherweise verfügbaren Compilern. Bei experimentellen Compilern im
universitären Bereich gab es das wohl schon viel früher.
Post by Hans-Peter Diettrich
Ich bin vom avr-gcc höchst beeindruckt, was die Optimierung betrifft :-)
Naja...
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Jakob Achterndiek
2017-03-03 23:33:19 UTC
Permalink
[..] Den ausführbaren Code erzeugt
der Compiler, und *den* müßtest Du dazu bringen, kürzeren Code zu
erzeugen. Das wird dann aber so undurchsichtig, wie man das
bewerkstelligen könnte, daß es die Arbeit kaum wert ist. Und der nächste
Compiler reagiert vielleicht wieder ganz anders auf solche
Optimierungsversuche.
Was die Programmgröße betrifft, da brauchen Unicode Strings doppelt so
viel Speicherplatz wie AnsiStrings (in D5). Da *könnte* man durch eine
explizite Vorgabe von AnsiString statt String etwas Platz sparen, aber
leider nur auf Kosten von Rechenzeit, da intern (Programm und System)
fast nur noch Unicode Strings benutzt werden.
IMO läßt sich am einfachsten Speicherplatz sparen, wenn man die
ExtendedRTTI abschaltet, und das ist in Delphi sehr mühsam :-(
Noch einmal danke für die Auflistung möglicher Ursachen. Ich möchte
noch einmal wiederholen:
1. Es handelt sich bei meinem Programm wirklich um zwei Sätze von
Units mit jeweils *vollständig identischen* Programmcodes und dito
Erscheinungsbild. Lediglich die uses-Listen mußten den Vorgaben
der beiden Compiler (Delphi 5 prof und Delphi 10.1 Studio) leicht
angepaßt werden.
2. Nur in den beiden TmySQLDatabases sind die Einstellungen für
ConnectionCharacterSet unterschiedlich: latin1 unter Delphi 5 und
utf8 unter Delphi 10. Beide greifen auf ein und dieselbe Personal-
Datenbank zu, deren insgesamt rund 3000 Datensätze unter utf8
eingelesen sind.
3. Beide Quellcode-Sätze werden auf ein und demselben Computer
kompiliert, dieser ist noch ein 32-bit-System und läuft z.Zt unter
Windows 8.1 .
4. Mich betrübt die Aufblähung durch Delphi 10.1 auf das Vierfache
dessen, was Delphi 5 daraus macht, nicht. Sie erstaunt mich nur.

Und was den Fortschritt angeht: Das mit dem neuen Delphi 10.1 Studio
kompilierte und viermal so lange Programm startet mit einer knappen
Sekunde bis zur Anzeige des ersten Datensatzes gleich schnell wie das
aus Delphi 5; aber ein Zyklus mit refresh und neu laden dauert mit
etwa 10 Sekunden fünfmal so lange. :(

Noch einmal Dank und Gruß an alle Mitdenker.
j/\a
Matthias Eißing
2017-03-02 06:21:00 UTC
Permalink
Post by Marc Santhoff
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5 und
D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine zusätzliche
Größenverdopplung durch den Schritt von 32 Bit zu 64 Bit
Primär ist der Größenzuwachs Unicode und RTTI geschuldet.
--
cu://Matthias.Eiß***@iOS [Embarcadero]
Marc Santhoff
2017-03-02 21:39:52 UTC
Permalink
Post by Matthias Eißing
Post by Marc Santhoff
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5
und D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine
zusätzliche Größenverdopplung durch den Schritt von 32 Bit zu 64 Bit
Primär ist der Größenzuwachs Unicode und RTTI geschuldet.
Bei Unicode hatte ich angenommen, das kein so starker Faktor.

Windows arbeite ja schon recht lange zumindest mit 16 Bit/Zeichen,
UTF-16 iirc. In die Versionsgeschicht von Delphi kan ichh's aber nicht
einsortieren.

Marc
Matthias Frey
2017-03-03 09:13:28 UTC
Permalink
Post by Marc Santhoff
Post by Matthias Eißing
Post by Marc Santhoff
Wenn man für Weiterentwicklung über die Jahre (wieviele zwischen D5
und D10?) eine Verdopplung der Größe annimmt, bleibt ca. eine
zusätzliche Größenverdopplung durch den Schritt von 32 Bit zu 64 Bit
Primär ist der Größenzuwachs Unicode und RTTI geschuldet.
Bei Unicode hatte ich angenommen, das kein so starker Faktor.
Windows arbeite ja schon recht lange zumindest mit 16 Bit/Zeichen,
UTF-16 iirc.
Halbrichtig. UTF-16 iirc ja, aber:
"UTF-16 ist eine Kodierung mit *variabler* Länge für Unicode-Zeichen."
Es sind aber beileibe nicht immer 16 Bit/Zeichen.
Wer sich schon mal mit Surrogaten rumschlagen hat müssen (würg)
weiß wie kompliziert das ist.

Der Grössenzuwachs dürfte auch daran liegen dass es nun viele
Windows-API in einer A und W Variante gibt.
Post by Marc Santhoff
In die Versionsgeschicht von Delphi kan ichh's aber nicht
einsortieren.
Ab Delphi 2009
Post by Marc Santhoff
Marc
Matthias
Sieghard Schicktanz
2017-03-03 22:29:12 UTC
Permalink
Hallo Matthias,
Post by Matthias Frey
Post by Marc Santhoff
Bei Unicode hatte ich angenommen, das kein so starker Faktor.
Windows arbeite ja schon recht lange zumindest mit 16 Bit/Zeichen,
UTF-16 iirc.
"UTF-16 ist eine Kodierung mit *variabler* Länge für Unicode-Zeichen."
Es sind aber beileibe nicht immer 16 Bit/Zeichen.
Wer sich schon mal mit Surrogaten rumschlagen hat müssen (würg)
weiß wie kompliziert das ist.
Ich würde das in etwa so zusammenfassen:

Unicode ist der Ersatz des allgemeinen Zeichensatzchaos durch ein noch
größeres Codierungschaos.

Also im ganz normalen Sinn ein "Fortschritt".
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Hans-Peter Diettrich
2017-03-03 19:41:48 UTC
Permalink
Post by Matthias Frey
Post by Marc Santhoff
Windows arbeite ja schon recht lange zumindest mit 16 Bit/Zeichen,
UTF-16 iirc.
NT eigentlich schon immer. Ursprünglich hat MS angenommen, mit UCS-2
auszukommen, wie man vorher geglaubt hat, daß ASCII ausreicht, weil die
ganze kultivierte Welt ja Englisch spricht :-]
Post by Matthias Frey
"UTF-16 ist eine Kodierung mit *variabler* Länge für Unicode-Zeichen."
Es sind aber beileibe nicht immer 16 Bit/Zeichen.
Richtig, fällt nur selten auf.
Post by Matthias Frey
Wer sich schon mal mit Surrogaten rumschlagen hat müssen (würg)
weiß wie kompliziert das ist.
Auch richtig :-(
Post by Matthias Frey
Der Grössenzuwachs dürfte auch daran liegen dass es nun viele
Windows-API in einer A und W Variante gibt.
Die W Aufrufe gabs nur *nicht* in Win3. AFAIR wurden in Win95 die W
Aufrufe in A umgewandelt, in NT umgekehrt. Das war ein wesentlicher
Grund, warum die VCL auf AnsiString basiert, entsprechend der (damals)
geringeren Verbreitung von NT. Implementiert ist jeweils immer nur eine
Variante, bei der anderen werden Strings umcodiert bevor die
implementierte Version aufgerufen wird. Das passiert alles im System,
hat also mit der Programmgröße nichts zu tun.


Und wenn wir schon dabei sind, möchte ich von der Verwendung von Strings
mit unterschiedlichen Encodings in Delphi dringend abraten. Da hat sich
ein grundsätzlicher Verständnisfehler eingeschlichen, der zu
Konvertierungsfehlern führen kann. Man sollte sich daher tunlichst auf
*Zuweisungen* zwischen String-Variablen mit unterschiedlichem Encoding
beschränken, und keinesfalls String-*Ausdrücke* mit gemischten Encodings
benutzen.

Konkret sollten andere als Unicode (UTF-16) Encodings nur beim Lesen und
Schreiben von Dateien benutzt werden, nirgendwo sonst.

DoDi
Loading...