Elaboratore 32 bit

dem1509
Ciao a tutti! Vorrei capire quali sono le dimensioni di alcune variabili e delle costanti in un elaboratore a 32 bit. cosa cambia con quelli a 16 o 64 bit?
Ecco la lista delle variabili:
int v[4]
0
'\0'
"0"
float a
double b

Grazie per l'aiuto!

Risposte
vict85
Dipende dal compilatore.

dem1509
"vict85":
Dipende dal compilatore.

L'esercizio dice: Prendendo come riferimento un elaboratore a 32 bit, scrivere le dimensioni in byte delle seguenti variabili e costanti. come devo fare?

apatriarca
Lo standard C definisce solo delle dimensioni minime per i tipi di base come int. Ogni compilatore è libero di scegliere quale dimensione preferisce usare. La risposta a questa domanda è quindi in realtà impossibile senza dare informazioni aggiuntive sull'architettura e il compilatore che si sta usando. Supponendo che il tuo professore si stia riferendo ad una architettura x86 e che si stia lavorando con i più comuni compilatori per tale architettura (e sui diversi sistemi operativi), possiamo comunque abbastanza supporre che la dimensione di un int sia 32 bit (su architettura a 16 bit è spesso 16 bit, mentre su una a 64 bit rimane spesso di 32 bit). float e double sono più standard rispetto alle variabili intere e sono sempre rispettivamente di 32 e 64 bit. Nella quasi totalità delle architetture sono i tipi a singola e doppia precisione secondo lo standard IEEE754. Venendo alle costanti:
- 0 è una costante intera (per cui occupa 32 bit).
- '\0' è in realtà una variabile intera come nel caso precedente. Ma un compilatore potrebbe decidere di usarne solo uno di byte. In pratica entrambi le costanti occuperanno 0 byte perché ci sono istruzioni particolari per gestire lo zero.
- "0" è una stringa di due byte.

Si tratta insomma di qualcosa di molto più complicato di quello che il tuo professore vi avrà probabilmente spiegato.

Cronovirus
Ad esempio in c questo banale programma ti stampa le dimensioni in bytes

#include <stdio.h>

int main(){
        char ch = '\0';
        char str[2] = "0";
        printf("sizeof int: %d\n",sizeof(int));
        printf("sizeof \\0: %d\n", sizeof(ch));
        printf("sizeof \"0\": %d\n", sizeof(str));
        printf("sizeof float: %d\n",sizeof(float));
        printf("sizeof double: %d\n",sizeof(double));
}


Inoltre se sei su macchina a 64 bit lo puoi compilare come eseguibile a 32 bit con l'opsione
-m32
di
gcc
. Se lo fai in entrambi i modi, vedrai che non cambia niente tra le due versioni.

apatriarca
@Cronovirus: Il tuo codice non calcola correttamente '0'. Lo standard afferma infatti che '0' è una costante intera (int), ma nel tuo caso la stai assegnando a ch (una variabile char). Usando infatti il seguente codice:
#include <stdio.h>

int main(void)
{
	char c = '0';
	printf("sizeof(c) = %u\n", sizeof(c));
	printf("sizeof('0') = %u\n", sizeof('0'));
	return 0;
}

ottengo il seguente output:
sizeof(c) = 1
sizeof('0') = 4

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.