Datentypen c++ 32/64 Bit
-
Hallo zusammen,
wir versuchen gerade eine Anwendung(von extern) von 32 auf 64Bit zu portieren. Ich möcht währenddessen das ganze auch ein bisschen optimieren und beschleunigen. Nun meine Frage:
Wir haben ja nun eine 64Bit Anwendung unter Windows. Untereinander sind mehrere int's angelegt mit denen extrem viel rumhantiert wird während der Laufzeit. Würde es einen Vorteil bringen, wenn man anstatt "int" "long" verwenden würde? Wegen Alignment und so?
-
Nein.
-
Eher nicht. Edit: 6 Sekunden?? Argh.
-
Davon abgesehen, dass es performancetechnisch nichts bringt, sind auf vielen Compilern long und int gleich groß.
Du könntest int_fast32_t verwenden und möglicherweise kann eine Zielplattform mit mehr bits besser rechnen, aber ich gehe mal nicht davon aus.
-
Marthog schrieb:
Davon abgesehen, dass es performancetechnisch nichts bringt, sind auf vielen Compilern long und int gleich groß.
Hier übrigens eine nette Übersicht, nicht nur der (ziemlich alten und daher kaum relevanten) Mindestgrößen, sondern auch der (praktisch relevanten) aktuell üblichen Umsetzungen:
http://en.cppreference.com/w/cpp/language/types
-
Marthog schrieb:
Davon abgesehen, dass es performancetechnisch nichts bringt, sind auf vielen Compilern long und int gleich groß.
Im Allgemeinen ja, und im speziellen nochmal ja, weil ganz speziell bei MSVC
long
auch im 64 Bit Mode immer noch 32 Bit ist - gleich wieint
. Für 64 Bit muss manlong long
nehmen.Du könntest int_fast32_t verwenden und möglicherweise kann eine Zielplattform mit mehr bits besser rechnen, aber ich gehe mal nicht davon aus.
Ja. Ich denke auch dass die Nachteile wegen mehr RAM Verbrauch (=weniger der Workload passt in den Cache) sämtliche möglichen Vorteile aufheben werden.
Kann mich auch an einen Beitrag auf der Boost-Mailingliste erinnern, wo mal jmd. geschrieben hat dass die ganzen
xxx_fastNN_t
Typedefs auf modernen CPUs quasi sinnfrei sind, weil bei denen das Laden von Werten die erst auf Registerbreite erweitert werden müssen gleich schnell geht wie wenn der Wert schon mit Registerbreite im RAM steht.