PDA

Visualizza la versione completa : Architetture a 32/64 bit


giudf
02-07-2006, 15:04
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 ?!?

oregon
02-07-2006, 15:38
Ma tu hai installato un sistema operativo a 32 o 64 bit?

giudf
02-07-2006, 16:30
Fedora core 5.0
Credo sia quella a 32

andbin
02-07-2006, 16:51
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!!

oregon
02-07-2006, 17:24
Originariamente inviato da giudf
Fedora core 5.0
Credo sia quella a 32

Quindi ...

giudf
03-07-2006, 00:05
sizeof(char *) = 4 ?!?

oregon
03-07-2006, 06:36
Il puntatore e' a 32 bit ... quindi il sistema operativo e' a 32 bit ed e' tutto normale.

Per disporre dei 64 bit devi usare un sistema operativo a 64 bit (con relativo sistema di sviluppo).

giudf
03-07-2006, 11:43
Ti ringrazio, all'università il professore mi aveva infilato nella testa che la grandezza di un valore in C dipendeva esclusivamente dall'architettura della macchina e non dal sistema operativo. Ora so che si sbagliava (e non è la prima volta che mi dice una cosa per un altra) facendomi perdere giorni e giorni !!!!

Loading