Kommt es auf das Betriebssystem oder die Anwendung an, ob zB. "int" jetzt 32bit oder 64bit ist?



  • Hi!

    Ich frage mich, worauf es ankommt, ob zB. ein int x; jetzt 32- oder 64bit ist.

    Wenn ich eine Anwendung mit int x; 32bit kompiliere, und auf einer 64bit Maschine laufen lasse, ist die Variable im Maschinencode dann 32 oder 64 bit?
    Und long? Und long long? Und double? Und long double? Und ...

    😕



  • ich würde mal sagen, das hängt von der programmiersprache bzw. vom compiler ab



  • Die abstrakten Typen wie int gibt's nur, damit man von der Breite abstrahiert.



  • Grohool schrieb:

    ich würde mal sagen, das hängt von der programmiersprache bzw. vom compiler ab

    ein C compiler z.b. wird sich meistens an die registerbreite der 'general purpose' (deutschen wort?) register der CPU halten. ausnahme: bei 'nem 8-bitter ist 'int' trotzdem 16 bit breit.

    Die abstrakten Typen wie int gibt's nur, damit man von der Breite abstrahiert.

    wie meinste das?
    🙂



  • Das hängt von Compiler und Zielarchitektur ab. MSVC macht aus int (und auch long ) immer einen 32-bit Integer, auch wenn du für 64-bit (x86-64) kompilierst. Darum ist es besonders böse, wenn du von Zeigern nach Integer und umgekehrt konvertierst. Der GCC wiederum macht aus long unter 32-bit Einstellungen einen 32-bit Integer; unter 64-bit wird er aber 64-bit lang (AFAIK).

    Im übrigen wird 32-bit Code auch in einem 64-bit Betriebssystem normal ausgeführt als 32-bit Code. Nichts ändert sich 😉



  • fricky schrieb:

    wie meinste das?

    Ich hatte an die Formulierung im K&R gedacht: int repräsentiert die "natürliche" Wortgröße der Maschine.

    Mit meinen bescheidenen Assembler-Kenntnissen kann ich mir gerade noch vorstellen, daß es gut ist, nicht dauernd nur halbe Register oder 2 davon für eine Zahl zu verwenden (aber 8 Bits eine Zahl zu nennen wäre natürlich lächerlich).

    So hab ich mir gedacht, daß man sagen kann, daß es um eine Abstraktion geht: weil die Demigods damals dann doch nicht nur für die PDP's programmieren wollten, haben sie ein Abstraktum erfunden, das soviel heißt wie: ein General-Purpose-Wort bitte, und als ganze Zahl verwenden.

    Ist doch so, oder?

    fricky schrieb:

    'general purpose' (deutschen wort?)

    "Allzweck" wäre ganz gut, denke ich. Aber ist das überhaupt Hochdeutsch? Keine Ahnung.



  • µngbd schrieb:

    So hab ich mir gedacht, daß man sagen kann, daß es um eine Abstraktion geht: weil die Demigods damals dann doch nicht nur für die PDP's programmieren wollten, haben sie ein Abstraktum erfunden, das soviel heißt wie: ein General-Purpose-Wort bitte, und als ganze Zahl verwenden.

    kann sein, ich glaub' zwar nicht, dass sie im traum daran dachten, dass ihr C jemals für was anderen als 'ne PDPx verwendet wird, aber abstrahieren wollten sie schon. also weg von assembler, wo man sich immer merken muss, in welchem register was steckt, usw.
    🙂



  • jedenfalls ist die Größe von 'int' in C wahrhaft ein Problem mit Geschichte - schon in R. Miller: "The First Unix Port" (von PDP-11 nach Interdata 7/32) kann man lesen:

    I learned to be suspicious of any occurence of the number 2 in a C program - more often than not, it really meant sizeof(int) which on the 7/32 should be 4.

    da soll noch einer sagen, IT sei schnell-lebig 😃



  • Quelle: Richard Miller, Proc. USENIX, 1998



  • ;fricky schrieb:

    'general purpose' (deutschen wort?) register

    Universalregister


Anmelden zum Antworten