Autor Beitrag
3marci
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Do 16.06.11 18:20 
Hallo Leute,

ich habe mal eine frage zu 64 Bit.
Vorab: bitte denk in diesem Thread nicht an irgendwelche Frameworks wie .NET, sondern an Programme die nativ laufen, also z.B. in C++ mit der Win32 API.

Man sieht immer wieder mal in den releasenotes dass 64 Bit Software optimiert worden ist.
Meine Frage ist nun, wenn ich ein Programm nativ für 64 Bit verfügbar machen will, muss ich den Compiler einfach nur auf "64bit" stellen oder Teile des Quelltextes extra für 64 Bit anpassen?
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 16.06.11 18:27 
Du musst erstens für 64bit kompilieren und auf einem 64-Bit Rechner kompilieren.

Für diesen Beitrag haben gedankt: Regan
3marci Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Do 16.06.11 18:34 
user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:
Du musst erstens für 64bit kompilieren und auf einem 64-Bit Rechner kompilieren.

Logisch, das wusste ich auch.
Lies dir bitte nochmal meine Frage durch, goto Threadstart;
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 16.06.11 18:49 
Lies dir doch bitte meine Antwort richtig durch. Goto #Answer2.

Du musst nicht unbedingt Code anpassen, du kannst.

Für diesen Beitrag haben gedankt: Regan
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Do 16.06.11 19:00 
user profile icon3marci hat folgendes geschrieben Zum zitierten Posting springen:
Meine Frage ist nun, wenn ich ein Programm nativ für 64 Bit verfügbar machen will, muss ich den Compiler einfach nur auf "64bit" stellen oder Teile des Quelltextes extra für 64 Bit anpassen?

Du musst Teile des Quelltextes nicht anpassen. Der Compiler muss 64-bit beherrschen und auf einem 64-bit System laufen.

Für diesen Beitrag haben gedankt: 3marci
3marci Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Do 16.06.11 19:06 
user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:
Lies dir doch bitte meine Antwort richtig durch. Goto #Answer2.

Du musst nicht unbedingt Code anpassen, du kannst.
In deiner ersten Antwort hast du nichts davon geschrieben, ob man den Quelltext anpassen muss oder nicht.
Und das war ja meine Frage.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 16.06.11 19:17 
Hallo Marcel,

es kann natürlich sein, daß der bisherige Code nicht 'per se' 64-bit fähig ist (z.B. wenn man Zeiger nach int castet - und dann wieder zurück).
Man sollte unter C, C++ oder Delphi etc. dann möglichst alle Warnungen aktivieren, um mögliche Fehlerquellen zu finden.

Und gerade wenn eine Anwendung noch fremde DLLs verwendet, so müssen diese ja auch ersteinmal nach 64-bit umgestellt worden sein.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 16.06.11 19:42 
user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:
Du musst erstens für 64bit kompilieren und auf einem 64-Bit Rechner kompilieren.
Was hat das für einen Grund, dass du unbedingt auf einem 64-Bit Rechner kompilieren willst?

Was Delphi betrifft: XE 2 wird zwar für 64-Bit kompilieren können, aber selbst 32-bittig bleiben. Wozu sollte man das auch umstellen und zusätzliche Probleme provozieren?
Und ich sehe auch nicht wirklich einen Grund warum andere Compiler nur als 64-Bit Compiler auch dafür kompilieren können sollten.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 16.06.11 21:02 
Der Compiler muss nicht mal auf der selben Comilerplattform laufen, für welche er Code erzeugt (cross compiling)

_________________
Markus Kinzler.
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 16.06.11 21:16 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:
Du musst erstens für 64bit kompilieren und auf einem 64-Bit Rechner kompilieren.
Was hat das für einen Grund, dass du unbedingt auf einem 64-Bit Rechner kompilieren willst?

Was Delphi betrifft: XE 2 wird zwar für 64-Bit kompilieren können, aber selbst 32-bittig bleiben. Wozu sollte man das auch umstellen und zusätzliche Probleme provozieren?
Und ich sehe auch nicht wirklich einen Grund warum andere Compiler nur als 64-Bit Compiler auch dafür kompilieren können sollten.

Mir ist bewusst, dass es Cross-Compiler gibt, allerdings halte ich generell nicht so viel von Cross-Compilern, das hat vielleicht nichts mit Delphi XE2 zu tun, aber mit meiner schlechten Erfahrung mit Cross Compilern jeglicher Art. :P
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 16.06.11 21:56 
Der Compiler muss nicht zwingend auf 64 Bit laufen, aber 64-Bit-Systeme muss er zwingend beherrschen. Ob hier Cross-Compiler besser oder schlechter sind, ist ne Frage, wie gut der Zwischen-Code jeweils umgesetzt wird. Beim GCC und LLVM dürfte sich hier kaum ein Unterschied zwischen nativem und cross-compiliertem Binary zeigen, da beide von Haus aus mit einer abstrahierten Zwischensprache intern arbeiten. Ähnliches gilt auch für FPC und DCC: Wenn der Compiler ein ungenügendes Verständnis der Architektur hat, für die er Code erzeugt, ist das ergebnis voraussichtlich unbefriedigend. Inwiefern Borland Inprise CodeGear Embarcadero das inzwischen im Griff hat, kann ich derzeit noch nicht sagen ;-)

Zu den Microsoft-Compilern kann ich nichts sagen, da ich die nicht nutze. Irgendwie sind die seltsam ... Mal ganz davon abgesehen, dass ich sowohl nmake als auch VisualStudio nicht mag.

Andere, insbesondere kommerzielle Compiler sind mitunter auf bestimmte Plattformen hin optimiert, zeigen dann aber für den generischen Gebrauch ihre Schwächen. Zumal nicht nur der Compiler an sich guten Code erzeugen muss, sondern auch die beiliegende Runtime Library was taugen muss, da der Code ansonsten so grottig wie die Compilate von Delphi 5-7 laufen (wer Assembler kann UND sich die Binaries mal angeschaut hat, weiß, was ich meine).

Um also zu deiner Frage zurück zu kommen: Der Compiler ist ein wesentlicher Bestandteil für gute Software; ein anderer, der aber oftmals außer Acht gelassen wird, ist die Software-Architektur, die entscheident zur Qualität von Software beiträgt. Wenn ich also ein Programm schreibe und weiß, dass ich ein 64-Bit-System nutze, dann sollte ich dies in meiner Software-Architektur mit einplanen, z.B. indem ich Zugriffe auf Variablen möglichst auf 64-Bit-Datentypen gestalte, wenn dies möglich ist. Auch bei der Verwaltung von Speicher kann ich auf einem 64-Bit-System wesentlich flexibler umgehen (z.B. Vermeidung von klassischem Paging bei großen Datenbeständen, konsistente, zusammenhängende Datenbereiche, statt verstreuter Heaps, ... Leider sind dies alles Optimierungen, die in den seltensen Fällen der Compiler alleine machen kann, da dieser zwar weiß, dass hier 2^64 Bytes addressiert werden können; ob es sich daher aber lohnt, die Hashtable in Methode XY auf Grund des größeren Adressraums zu vergrößern, kann letztenendes nur der Programmierer entscheiden.

Was Compiler an dieser Stelle rausholen können, ist eine Optimierung, die ggf. paralelle Operationen für mehrere If-Abfragen zusammenfasst und daher aus 5 If-Abfragen eine einmalige Berechnung macht, bei der nur noch anhand einzelner Bits Code auszuführen ist; bestenfalls ohne Verzweigung, Cache Misses, ...

Wo wir aber grad bei 64 Bit sind: Viele Programme können den größeren Adressraum bzw. die breiteren Speicherzugriffe nicht effektiv nutzen. Da bringt dann eine Aussage wie "Optimiert für 64 Bit" nur den Vorteil, noch besoffener zu sein, als nach 32 Bit.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.