Per prima cosa dovresti dirci se il tuo sistema operativo è a 32 o 64 bit (e dirci quale compilatore stai usando).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 ?!?
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!!