Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

11

24.05.2010, 13:12

Ich bin jetzt soweit, dass ich im Konfigurationsmanager eine neue Projektmappenplattform mit dem Namen "Win64" erstellt habe, und die Einstellungen von Win32 übernehmen haben lassen. aber in den Projekteigenschaften ist unter Plattform nur Win32 zur Auswahl?!
Jemand ne Ahnung, wieso das nicht geht?
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

12

24.05.2010, 13:40

Oh oke. Danke das wusste ich nicht.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

13

24.05.2010, 17:47

Bezüglich Bitlänge der Typen gibt es verschiedene Datenmodelle. Visual Studio nutzt LLP64 und hat 32 Bit long. Der gcc nutzt LP64 und hat 64 Bit long. Ansonsten bleibt es aber gleich: int 32, long long 64, Pointer 64 usw.

Bei x64 sind auch neue Register dazu gekommen. Das kann zu etwas Geschwindigkeitszuwachs führen. Außerdem kann man bei 64 Bit Prozessoren etwas mehr Funktionalität voraussetzen. So könnte man standardmäßig SSE nutzen und ähnliches.

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

14

27.05.2010, 16:40

Da ich das Thema gerade zufällig gesehen habe:
In der Regel solltest du lediglich eine 64-Bit-Config zu deinem Projekt hinzufügen müssen und es sollte... eigentlich... sofort funktionieren, ggf. noch mal die Übersicht der Erstellungskonfig für alle Projekte anschauen, ob dort auch alles jeweils auf 64-Bit steht.

Zum Nutzen generell:
Ich erstelle seit Jahren immer beides und unterm Strich sind die x64-Varianten von sich aus erstmal meistens minimalst langsamer und brauchen etwas mehr Speicher (dadurch dass Pointer halt gleich 8 Byte brauchen).
Wenn man den Vorteil von 64-Bit aber sinnvoll nutzt, sind je nach Anwendungsfall locker 30-40% höhere Performance drin, da man halt extrem großen Spielraum hat Daten einfach zu halten, die man auf 32-Bit-Sytemen mangels Speicher immer wieder freigeben müsste, seien es Daten einer Landschaft, 3D-Modelle, die man wieder von der Platte holen müsste usw. usw..

LG
Alyx

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

15

07.06.2010, 15:57

das thema ist schon etwas älter, aber trotzdem...

bei 64bit / 32bit muss man beim programmieren immer aufpassen. es gibt z.b. unterschiedliche int's (uint32_t, uint64_t), was dann bei funktionen wie printf() zu problemen führen kann (z.B. "%016lX" vs. "%016llX" für long). und selbst da muss man dann nochmals aufpassen, weil das bei MS wieder anders ist (da wäre es dann "%016I64X"... fragt mich nicht, weshalb).

ein beispiel, wie so eine config dann aussieht, wenn man für die unterschiedlichen compiler und zielplattformen (jetzt nicht nur amd64 und x86) unterscheiden will, sieht so aus (ACE wrappers 5.6.6): http://github.com/mangos/mangos/blob/mas…e/Basic_Types.h

wenn man nicht aufpasst, kann es dann zu solchen fehlern führen: http://github.com/mangos/mangos/commit/8…adbefd069e3fdc9
ich hatte dort "%u" verwendet, was auf 32bit systemen auch funktionierte. aber auf 64bit systemen hat es dann natürlich nur die ersten 4 bit genommen, was dazu führte, dass dort immer 0 stand. nach einer änderung auf UI64FMTD (was bei ACE definiert ist und je nach plattform "%u", "%lu" oder "%llu" ist) hat das ganze dann funktioniert.

von daher: immer auf allen plattformen testen, wenn ihr was macht ;)
(und vorallem auch mit unterschiedlichen compilern...)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DasBlub« (07.06.2010, 16:03)


Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

16

07.06.2010, 20:47

Oder Datentypen nutzen die Plattform unabhängig sind. Gerade bei Netzwerkspielen von vorteil wenn ein 32 bit immer lang ist egal wo ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

17

07.06.2010, 21:48

hat den Vorteil, das mensch sich gleich Gedanken über portable Programmierung macht ;)

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

18

07.06.2010, 23:54

klar, ich arbeite wenn immer möglich nur mit den ACE datentypen bei dem projekt (d.h. da hast du dann uint32, int32, uint64, int64, etc.), aber es gibt halt auch datentypen, wie z.b. time_t, die plattformabhängig sind :/

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

19

08.06.2010, 16:09

Diese sollte man dann aber wenn möglich nicht verschicken und wenn möglich auch die entsprechenden Verarbeitungsmethoden nehmen (z.B. asctime oder eben in eine time struct umwandeln). Außerdem, wer nutzt in zeiten von std::stringstream noch sprintf, wenn es um größere/portable Projekte geht ;) ?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige