gcc: Größe der Datentypen bei 32/64 Bit
Hi, bei der Einrichtung eines neuen Rechner mit einem AMD 64-Bit-Prozessor habe ich das Problem, daß einige selbsterstellte Programme nicht mehr laufen. Jetzt bin ich darauf gestoßen, daß der Speicherverbrauch von int-Variablen unterschiedlich ist. Bisher war mein Wissensstand der, daß short int : 16 bit long int: 32 bit int : optimal für die jeweilige Rechnerarchitektur int und long int scheinen aber bei 64 Bit davon abzuweichen. Wie wird nun der Platzbedarf bei unterschiedlichen Rechnerarchitekturen vergeben und welche Datentypen sind wirklich fest, damit ich sie für dir Datenspeicherung auf der Festplatte verwenden kann ? Suse 10.0 / gcc
cfjh@bastau:~/projects/wst/common> g++ --version g++ (GCC) 4.0.2 20050901 (prerelease) (SUSE Linux) Copyright (C) 2005 Free Software Foundation, Inc.
Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hi, so weit ich weiß git es keine fest defineirten größen. Abhilfe schafft: #include <inttypes.h> uint32_t meinevariable; //entspricht einem unsigned int von 32 bit mfg Conny Marco Menebröcker Am Montag, 19. Juni 2006 10:16 schrieb Jürgen Hochwald:
Hi,
bei der Einrichtung eines neuen Rechner mit einem AMD 64-Bit-Prozessor habe ich das Problem, daß einige selbsterstellte Programme nicht mehr laufen. Jetzt bin ich darauf gestoßen, daß der Speicherverbrauch von int-Variablen unterschiedlich ist. Bisher war mein Wissensstand der, daß short int : 16 bit long int: 32 bit int : optimal für die jeweilige Rechnerarchitektur
int und long int scheinen aber bei 64 Bit davon abzuweichen.
Wie wird nun der Platzbedarf bei unterschiedlichen Rechnerarchitekturen vergeben und welche Datentypen sind wirklich fest, damit ich sie für dir Datenspeicherung auf der Festplatte verwenden kann ?
Suse 10.0 / gcc
cfjh@bastau:~/projects/wst/common> g++ --version g++ (GCC) 4.0.2 20050901 (prerelease) (SUSE Linux) Copyright (C) 2005 Free Software Foundation, Inc.
Jürgen
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hallo Jürgen, Jürgen Hochwald schrieb:
Hi,
bei der Einrichtung eines neuen Rechner mit einem AMD 64-Bit-Prozessor habe ich das Problem, daß einige selbsterstellte Programme nicht mehr laufen. Jetzt bin ich darauf gestoßen, daß der Speicherverbrauch von int-Variablen unterschiedlich ist. Bisher war mein Wissensstand der, daß short int : 16 bit long int: 32 bit int : optimal für die jeweilige Rechnerarchitektur
geändert haben sich von 32 nach 64 Bit: long 4 -> 8 und long double 12 -> 16 Gruß Boris -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Montag, 19. Juni 2006 11:23 schrieb Boris Höffgen:
geändert haben sich von 32 nach 64 Bit: long 4 -> 8 und long double 12 -> 16
Bei welchen Datentypen kann ich sicher sein, daß sie sich nicht beim Wechsel der Architekrur ändern ? short int immer 16 Bit, int immer 32 Bit float immer 32 Bit double immer 64 Bit 16-Bit-Systeme mal außer Acht gelassen.. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hallo Jürgen, Jürgen Hochwald schrieb:
Am Montag, 19. Juni 2006 11:23 schrieb Boris Höffgen:
geändert haben sich von 32 nach 64 Bit: long 4 -> 8 und long double 12 -> 16
Bei welchen Datentypen kann ich sicher sein, daß sie sich nicht beim Wechsel der Architekrur ändern ?
short int immer 16 Bit, int immer 32 Bit float immer 32 Bit double immer 64 Bit 16-Bit-Systeme mal außer Acht gelassen..
richtig, nur bei "long" und "long double" musst Du aufpassen. Gruß Boris -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Montag, 19. Juni 2006 13:03 schrieb Boris Höffgen:
richtig, nur bei "long" und "long double" musst Du aufpassen.
Ich habe jetzt bei einem Programm alle 'long' entfernt (also nur int statt long int), und das Programm läuft wieder. Jürgen www.wetterstation-porta.info -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hallo, Am Mon, 19 Jun 2006, Jürgen Hochwald schrieb:
Am Montag, 19. Juni 2006 11:23 schrieb Boris Höffgen:
geändert haben sich von 32 nach 64 Bit: long 4 -> 8 und long double 12 -> 16
Bei welchen Datentypen kann ich sicher sein, daß sie sich nicht beim Wechsel der Architekrur ändern ?
Du solltest <stdint.h> einbinden und dann die mit einer festen Anzahl Bits definierten Typen verwenden: int8_t int16_t int32_t int64_t uint8_t uint16_t uint32_t uint64_t Und bei anderen Dingen solltest du die dafuer definierten Typen verwenden, also z.B. 'ssize_t/size_t' bei 'read(2)'... -dnh -- Jeder, der hier die Schnauze aufmacht, kriegt irgendwann eins auf die Fresse, jeder, unterschiedslos, streng demokratisch. Das ist ja das Schöne am Usenet, daß Diskussionen manchmal schwer seriös beginnen (über Kommasetzungen etwa) und dann als virtuelle Wirtshausrauferei enden. -- Wolfram Heinrich in desd -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Montag, 19. Juni 2006 12:55 schrieb Jürgen Hochwald:
Am Montag, 19. Juni 2006 11:23 schrieb Boris Höffgen:
geändert haben sich von 32 nach 64 Bit: long 4 -> 8 und long double 12 -> 16
Bei welchen Datentypen kann ich sicher sein, daß sie sich nicht beim Wechsel der Architekrur ändern ?
short int immer 16 Bit, int immer 32 Bit float immer 32 Bit double immer 64 Bit 16-Bit-Systeme mal außer Acht gelassen..
Nein, das mag für gcc auf ia32 und x86_64 gültig sein, sichergestellt ist das allerdings nicht. Ich würde mich nicht drauf verlassen, dass das auf ner SPARC, MIPS, PPC, ... CPU auch immer so ist, oder mit nem anderen Compiler Also doch lieber <stdint.h> oder <inttypes.h> verwenden. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Montag, 19. Juni 2006 21:57 schrieb Manfred Tremmel:
Am Montag, 19. Juni 2006 12:55 schrieb Jürgen Hochwald:
Am Montag, 19. Juni 2006 11:23 schrieb Boris Höffgen:
geändert haben sich von 32 nach 64 Bit: long 4 -> 8 und long double 12 -> 16
Bei welchen Datentypen kann ich sicher sein, daß sie sich nicht beim Wechsel der Architekrur ändern ?
short int immer 16 Bit, int immer 32 Bit float immer 32 Bit double immer 64 Bit 16-Bit-Systeme mal außer Acht gelassen..
Nein, das mag für gcc auf ia32 und x86_64 gültig sein, sichergestellt ist das allerdings nicht. Ich würde mich nicht drauf verlassen, dass das auf ner SPARC, MIPS, PPC, ... CPU auch immer so ist, oder mit nem anderen Compiler
Also doch lieber <stdint.h> oder <inttypes.h> verwenden.
Ich vergaß, definiert für C ist: sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = sizeof(size_t) also im extrem sind char, short, int und long alle 8 Byte, auf alles andere kann man sich nicht zwingend verlassen. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Montag, 19. Juni 2006 22:28 schrieb Manfred Tremmel:
also im extrem sind char, short, int und long alle 8 Byte, auf alles ^^^^ Bit natürlich...
andere kann man sich nicht zwingend verlassen.
-- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
participants (5)
-
Boris Höffgen
-
Conny Marco Menebroecker
-
David Haller
-
Jürgen Hochwald
-
Manfred Tremmel