Non necessariamente. Per questioni di compatibilità alcuni compilatori (come Microsoft Visual C++) cambiano solo le dimensioni dei puntatori (che sono l'unica cosa che sicuramente cambia passando dai 32 ai 64 bit) e definiscono un nuovo tipo (di solito long long o qualcosa del genere) per gli interi a 64 bit.Originariamente inviato da Ippo343
Scusate, ma nei sistemi a 64 bit le variabili non dovrebbero avere una dimensione "doppia" rispetto ai sistemi a 32 bit?
Comunque g++ segue la politica per me più sensata, per cui mantiene i tipi fino all'int di dimensioni uguali, e cambia il long (che sulle piattaforme a 32 bit di solito è un intero a 32 bit uguale all'int normale) in un intero a 64 bit (8 byte). In questa maniera ottieni tutta la varietà di interi con i vari tipi forniti di default dal C++. Per verificare le dimensioni dei tipi comunque ho scritto un programmino estremamente semplice:
Sulla mia macchinacodice:#include <iostream> #define PRINT_TYPE_SIZE(type) std::cout<<#type<<" size: "<<sizeof(type)<<" bytes"<<std::endl int main() { PRINT_TYPE_SIZE(void *); PRINT_TYPE_SIZE(short); PRINT_TYPE_SIZE(int); PRINT_TYPE_SIZE(long); PRINT_TYPE_SIZE(long long); PRINT_TYPE_SIZE(float); PRINT_TYPE_SIZE(double); PRINT_TYPE_SIZE(long double); PRINT_TYPE_SIZE(char); PRINT_TYPE_SIZE(wchar_t); return 0; }
compilato cosìcodice:matteo@teoubuntu:~/cpp$ uname -a Linux teoubuntu 2.6.28-14-generic #46-Ubuntu SMP Wed Jul 8 07:41:18 UTC 2009 x86_64 GNU/Linux matteo@teoubuntu:~/cpp$ g++ --version g++ (Ubuntu 4.3.3-5ubuntu4) 4.3.3 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
dà questi risultati:codice:matteo@teoubuntu:~/cpp$ g++ dimensione\ tipi.cpp -O1 -O2 -O3 -Wall -o dimensione\ tipi
codice:matteo@teoubuntu:~/cpp$ ./dimensione\ tipi void * size: 8 bytes short size: 2 bytes int size: 4 bytes long size: 8 bytes long long size: 8 bytes float size: 4 bytes double size: 8 bytes long double size: 16 bytes char size: 1 bytes wchar_t size: 4 bytes matteo@teoubuntu:~/cpp$

Rispondi quotando