PDA

Visualizza versione completa : [C/C++] Relazione tra processore e dimensione delle variabili


UG0_BOSS
11-05-2007, 22.12.24
Una cosa che mi sono sempre chiesto... spesso leggo che la dimensione delle variabili (int, short, long, double..) può variare a seconda del processore dove vado a compilare il programma.

Qualcuno sa da cosa dipende la dimensione delle variabili? Subito pensavo che per esempio su un processore a 32 bit la dimensione dell'intero fosse 32 bit ma poi ripensandoci mi è sembrato assurdo :D

Dr_House
12-05-2007, 01.31.47
Il legame sta invece proprio nei registri interni della CPU che vengono utilizzati per memorizzare porzioni dei dati acceduti dalle aree di memoria per elaborarli

Le variabili sono memorizzate in memoria centrale (in RAM) secondo la dimensione del tipo (Int, Long etc..) occuperanno dei relativi Byte di memoria.


Ogni qual volta il processore deve compiere un operazione a 32 bit, prende 32 biti di quella variabile e opera su di quelli, perché appunto ha registri interni a 32 Bit.

Se ne avesse 64, prenderebbe 64 bit della variabile per elaborare.

Ovviamente poi il tutto dipende dalla velocità del Clock e quindi dal fetch della CPU che se oltre ad aver registri più capienti ha anche una velocità migliore di elaborazione dei dati, ha prestazioni superiori

Questo solo sommariamente ovvio

Flavio58
26-05-2007, 18.52.16
Una volta ... 1986 o giù di li ... la piu' grossa diversità era sull'int del C che sotto ambiente DOS era 16 bit mentre su certi sistemi Unix era 32 bits.
Ora questo non esiste piu' in quanto il 16 bits è demandato allo short mentre l'int è in gener 32 bits.
Il tipo non è dipendente dal processore (32 o 64 bits) ... al limite questo è solo funzione di come il sistema elettronico gestiusce l'indirizzamento e il trasferiomento dei dati sull data bus.
Le unaiche valutazioni da fare sono relative alle dimensioni del tipo e al limite di dove questo è allocato (la classe di memoria).
Quest'ultima influisce sulle dimansioni massime che possono occupare le variabili.
Per farti un esempio le variabili locali vengono allocate nello stack per cui se in fase di link tu stabilisci che lo stack è 64K e mi fai :

void function(void)
{
int var[60000];
}

Ti cuccherai un : stack overflow .....
Ma questo è un altro discorso ....

PS: Guarda che ordine nella scrittura del codice ....

main(k){float i,j,r,x,y=-16;while(puts(""),y++<15)for(x
=0;x++<84;putchar(" .:-;!/>)|&IH%*#"[k&15]))for(i=k=r=0;
j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i<11&&k++<111;r=j);}

E siii...se tutti i programmi fossero cosi tutto sarebbe piu'0 chiaro e leggibile ....