Wieviel Bytes belegt long und die unterschiede der Plattformen

Post Reply
Message
Author
matong

Wieviel Bytes belegt long und die unterschiede der Plattformen

#1 Post by matong »

Servus Leute,
ich hab da mal ne Frage zu long.
Wir haben gelernt, das long immer 4 Bytes unter Windows belegt. Ich hatte das mal unter linux mit sizeof probiert, und da waren es mal 8 Bytes [dachte ich zumindest]. Doch heute waren es nur noch 4 Bytes.

Ich würde jetzt mal gerne Wissen, von was es abhängt, das long 8 oder 4 Bytes lang ist. Habe im inet nur soweit was herausgefunden, dass das mit ansi-c zusammen hängt.

Hängt das dann vom Compiler ab [einstellen von ansi-c oder ähnliches] oder vom Prozessor.

Danke im voraus,

Matong

feuerrote spielmobil

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#2 Post by feuerrote spielmobil »

> Doch heute waren es nur noch 4 Bytes.

war bei mir heut auch so. das hängt eben stark von der mondphase ab. ausserdem fährt der compiler bei starkem sonnenwind sicherheitshalber auf 4 bytes zurück.
(scnr, ist nicht bös gemeint).

> Ich würde jetzt mal gerne Wissen, von was es abhängt, das long 8 oder 4 Bytes lang ist.
> Hängt das dann vom Compiler ab [einstellen von ansi-c oder ähnliches] oder vom Prozessor.

es hängt vom compiler ab, nicht vom prozessor. üblich sind 4 bytes. soweit ich weiss (ich habs grad nochmal nachgeschlagen) schreibt ansi-c keine festen werte vor. es ist implementierungsabhängig.

matong

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#3 Post by matong »

Servus erstmal,
danke für den tip, das es an den sonnenwinden liegt.

aber nun mal ernst:
d.h. es ist unabhängig vom prozessor, dann könnte man ja dem compiler sagen, er solle long std. auf 8 byte setzen.

Das mit dem ansi-c std. stand auf dieser webseite:
<link>http://home.fhtw-berlin.de/~junghans/cr ... html</link>

Irgendwie hab ich so langsam das Gefühl, das keiner so recht weiß warum das mal 4 und dann wieder 8 byte sind.

Denn es gibt ja anscheinend auch noch long long [8 Byte], dass soll was zu tun haben mit C99.

Möchte mal wissen wer sich long ausgedacht hat, wenn die meißten compiler eh nur 4 byte benutzen.

cu matong

feuerrote spielmobil

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#4 Post by feuerrote spielmobil »

> d.h. es ist unabhängig vom prozessor, dann könnte man ja dem compiler sagen, er solle long std. auf 8 byte setzen.

wenn (!) der compiler so etwas vorsieht, würde das gehen. vorausgesetzt, es ist tatsächlich nicht in ansi-c festgeschrieben, dann wäre das immer noch ansi-konform. so etwas zu implementieren, ist kein prinzipielles problem.

> Irgendwie hab ich so langsam das Gefühl, das keiner so recht weiß warum das mal 4 und dann wieder 8 byte sind.

da müsstest du erstmal klären, wie du auf die 8 byte kommst.

> Denn es gibt ja anscheinend auch noch long long [8 Byte], dass soll was zu tun haben mit C99.

nun ja, "long long" ist aber nicht "long".

> Möchte mal wissen wer sich long ausgedacht hat, wenn die meißten compiler eh nur 4 byte benutzen.

merkwürdige logik. irgendeinen namen und irgendeine länge muss es nunmal haben. oder steht irgendwo geschrieben, dass ein typ, der sich long nennt, auch richtig fies lang sein muss?
short int: 2 bytes. long: 4 bytes. ich sehe dein problem nicht.

HTH & mfg - das feuerrote spielmobil.

matong

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#5 Post by matong »

Servus,

mein problem ist ganz einfach dieses, dass es Leute gibt, die sagen, das long manchmal auch 8 Byte lang ist.

short int sind ja 2 Byte
int sind 4 Byte
long int 4 Byte

Mein Prof meinte halt, dass es in der "Windows .net umgebung" 4 Byte seien, dies aber nicht der standart ist.

Matong

Jochen

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#6 Post by Jochen »

Nach meinem Stand der Dinge ist "short int" definiert als 16 Bit, "long int" definiert als 32 Bit. "int" ist definiert als "natürliche" Grösse des OS/der Architektur, weshalb "int" unter DOS 16 Bit breit ist und unter UNIX typischerweise 32 Bit.

Prinzipiell könnte ein "int" auf 64-Bit-Architektur/OS sogar 64 Bit gross sein, aber aus absehbaren Portabilitätsproblemen wollte man das Problem wohl mit den Datentyp "long long" (64 Bit) umgehen. Ob das mittlerweile in C99 definiert ist, weiss ich nicht. Zumindest solange man sich im Bereich "C" bewegt, hat Dein Prof unrecht. "C#" mag eine andere Sachen sein...

Jochen

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#7 Post by hjb »

Hi!

Auf 32-bit-Rechnern ist long in aller Regel 32 bit (ich kenne kein Gegenbeispiel). Unter 16-bit-Systemen wie DOS könnte long aber auch 16 bit sein.

Auf 64-bit-Rechnern gibt es verschiedene Modelle, aber long dürfte in diesem Fall meist 64 bit sein, während int manchmal 32, manchmal 64 bit ist, und short 16 oder 32 bit sein kann.

Kurz gesagt: Die Länge von short, int und long ist nicht festgelegt und man darf bei portablen Programmen keine Annahmen machen, außer daß long >= int >= short >= char ist.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

Jochen

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#8 Post by Jochen »

Also, bei so viel teils widersprüchlichen Aussagen habe ich jetzt einfach mal in der Bibel (Kernighan&Ritchie, "The C Programming Language, 2nd Edition") nachgeschlagen.

Ganz klar ist:
<li>char = "a single byte"
<li>int = "an integer, typically reflecting the natural size of integers on the host machine"
Ausserdem gilt:
<blockquote><hr>Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that that shorts and ints are at least 16 bit, longs are at least 32 bits, and short is no longer than int, which is no longer than long.<hr></blockquote>Also hat hjb größtenteils recht. Lediglich die Vermutung, long könne unter DOS 16 Bits haben, ist nach dem o.a. Zitat nicht korrekt, da long mind. 32 Bits haben muss. In der Include-datei <limits.h> stehen übrigens die jeweils geltenden Maximal- und Minimal-Werte für den jeweiligen Datentyp.

Mein früheres Posting ziehe ich hiermit offiziell zurück und erkläre es für null und nichtig. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Jochen

matong

Re: Wieviel Bytes belegt long und die unterschiede der Plattformen

#9 Post by matong »

Servus Leute,
also kann man zusammenfassend sagen, das die länge von long int vom dem Prozessor & dem verwendeten OS abhängt, oder?


Vielen Dank, matong

Post Reply