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?
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.
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:
codice:
#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;
}
Sulla mia macchina
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.
compilato così
codice:
matteo@teoubuntu:~/cpp$ g++ dimensione\ tipi.cpp -O1 -O2 -O3 -Wall -o dimensione\ tipi
dà questi risultati:
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$