Originariamente inviato da giudf
Ragazzi, io ho la seguente macchina:

AMD Turion(tm) 64 Mobile

che dovrebbe essere dal nome a 64 bit.

Per sfizio ho fatto il seguente programma in c:

main()

printf("Un long occupa %d ed un int %d",sizeof(long),sizeof(int));

e, mi è venuto fuori questo output:
Un long occupa 4 ed un int 4 .

Ma se è vero che è a 64 bit un long non dovrebbe occupare 8 byte ?!? Non so proprio che pensare, il compilatore non sbaglia questo è certo.

Qualcuno sa dirmi qualcosa di più in proposito ?!?
Per prima cosa dovresti dirci se il tuo sistema operativo è a 32 o 64 bit (e dirci quale compilatore stai usando).

Come seconda cosa, se vuoi conoscere meglio i dettagli del "64 bit", leggi: http://en.wikipedia.org/wiki/64-bit

Poi sappi che conoscere la dimensione del long non permettere di avere l'indicazione sul 32 o 64 bit dell'architettura in modo esatto. Dipende dal modello dei dati scelto da chi ha sviluppato il sistema operativo!!! Ad esempio la Microsoft ha deciso di adottare il modello LLP64 per i suoi sistemi operativi a 64 bit. Con questo modello, il long continua ad essere di 32 bit (4 byte)!!!
Hanno fatto questa scelta, presumo, per non "rompere" troppo codice e strutture esistenti.

Potresti fare di meglio, testando invece la dimensione di un puntatore, quindi ad esempio sizeof (char*). In una architettura a 64 bit i puntatori sono indubbiamente a 64 bit!!