datentypen unter 64 bit OS



  • hoi

    wie sieht das unter 64 bit mit den datentypen aus ? gibts da schon was fest definiertes oder wie sieht das dann aus ? bin grad draufgekommen, das meine streamklasse unter 64 bit komplett falsch interpretiert werden wuerde, da ein int wahrscheinlich 64 bit haben wird und noicht mehr 32 usw.

    wie macht ihr das, wenn ihr plattformuebergreifend etwas programmieren wollt ?
    64 bit OS is heute ja nicht mehr so selten wie einst.

    gibts da noch andere dinge auf die man achten sollte wenn man beim portieren auf ein OS 64 wenig probleme haben will ?

    cermy

    Meep Meep



  • Schau dir mal die Numeric Limits in C++ an, der Header heißt <limits>. Die geben dir auskunft über die Wertebereiche der einzelnen Datentypen.

    Im C++ Standard ist ja nicht definiert, wie groß die Typen zu sein haben. Deshalb kannst du das auch zur Laufzeit mit den Limits prüfen. Oder du definierst dir typedefs, und je nach Compiler bzw. Platform werden eben diese geändert.

    MS macht das ja schon immer so, mit DWORD fällt mir da spontan ein. Die haben das "Problem" schon damals erkannt. 😉



  • Datentyp und Größe in bytes (LP64 Size)

    char (1)
    short (2)
    int (4)
    long (8)
    long long (8)
    pointer (8)
    float (4)
    double (8)
    long double (16)
    struct (je nach Aufbau)
    enum (4)

    Merkregel (Linux):
    Niemals ein Adresse auf eine mit int deklarierte Variable zuweisen, sondern stets long verwenden (int bleibt nämlich bei 32bit - long und allgemeine Zeigertypen hingegen 64bit beanspruchen).

    Bei Windows sieht es jedoch anders aus:

    - long belegt stets 32bit
    - es gibt dafür zwei neue Datentypen: LONG_PTR und ULONG_PTR, welche je nach zugrundeliegender Architektur 32 oder 64bit beanspruchen
    - daher müssen Variablen, die als Zeigertypen verwendet werden sollen als *_PTR Typ vereinbart werden

    (Quelle: aktuelle IX - 7 Juli 2005)

    Viele Grüße,
    sirvenue



  • wie sieht das unter 64 bit mit den datentypen aus ?

    Da 64-bit nicht gleich 64-bit ist, es also verschiedene 64-bit-Platformen gibt, kann man das nicht generell sagen.
    Auf LLP-64-Platformen (z.B. Win64) ändert sich im Vergleich zu ILP-32-Platformen nur die Größe von Pointern und long longs.
    Bei LP-64 Platformen hingegen auch die Größe von longs.

    wie macht ihr das, wenn ihr plattformuebergreifend etwas programmieren wollt ?

    Mit Indirektion z.B. über typedefs.


Log in to reply