Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= M2 per programmatori JavaKeywords =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Rappresentazione dei dati in memoria

I tipi semplici sono: BOOLEAN, INTEGER, REAL, STRING e FUNCTION; i tipi strutturati sono: ARRAY e RECORD. I tipi statici (o ad allocazione automatica) sono: BOOLEAN, INTEGER e REAL. I tipi allocati dinamicamente sull'heap sono: STRING, ARRAY, RECORD. La figura qui sotto riassume la rappresentazione in memoria dei dati.

Quasi tutti i tipi sono rappresentati da una parola di memoria, eccetto REAL che ne occupa due. I pallini rappresentano puntatori, mentre le frecce indicano il blocco di memoria puntato quando il valore del puntatore è diverso da NIL.

BOOLEAN

Viene rappresentato con il tipo int del linguaggio C. Il valore logico FALSE è 0. Il valore logico TRUE può dipendere dalla macchina, e viene rappresentato dalla espressione in linguaggio C (!0) (in generale vale -1). Il valore default è FALSE.

INTEGER

Viene rappresentato con il tipo int del linguaggio C. Su processori a 32 bit il range di valori va da -2^31 a 2^31-1. Il valore default è zero.

REAL

Viene rappresentato con il tipo double del linguaggio C e in generale occupa 8 byte e permette di rappresentare numeri compresi tra 1.0e-308 e 1.0e308 con circa 15 cifre significative. Il valore default è 0.0.

STRING

Viene rappresentato con un indirizzo di memoria. Le stringhe vengono allocate dinamicamente, hanno lunghezza arbitraria e possono contenere qualsiasi sequenza di byte. Una stringa non può essere modificata o cancellata dalla memoria. Pertanto per modificare una stringa è necessario produrne un'altra. L'assegnamento di una variabile di tipo stringa a un'altra variabile di tipo stringa comporta solo la copia dell'indirizzo. Il garbage collector provvede a recuperare lo spazio di memoria occupato da stringhe non più in uso. La stringa NIL è rappresentata dal valore 0, e quindi non occupa memoria. La stringa vuota "" e tutte le stringhe di un solo carattere sono allocate in un'unica copia. L'unico modo per produrre l'allocazione in memoria di una nuova stringa è quello di usare l'operatore di concatenamento di stringhe o l'operatore di sottostringa e occorre generare stringhe di lunghezza >=2. Il valore default è NIL.

ARRAY

Una variabile di tipo ARRAY è l'indirizzo di memoria dove l'array è allocato. Il valore default è NIL e l'array non occupa memoria. Aggiungendo elementi, l'array viene allocato ed esteso automaticamente. Dereferenziare in una espressione un array NIL o un elemento di array non esistente comporta un errore fatale di esecuzione. La lunghezza di un array corrisponde all'indice più alto assegnato + 1. L'occupazione in memoria può essere leggermente superiore al numero di elementi effettivamente in uso, perché la libreria di runtime prealloca lo spazio necessario. Per recuperare la memoria occupata da un ARRAY si può assegnare NIL alla variabile. Il valore default degli elementi di un array non assegnati è il valore default del loro tipo (per gli INTEGER è zero, per le STRING e i RECORD è NIL, ecc.). Assegnando una variabile array a un'altra variabile array viene copiato solo l'indirizzo di memoria. Per produrre una copia effettiva dell'array è necessario copiarne gli elementi uno ad uno. Se gli elementi sono a loro volta array o record, è necessario copiare uno ad uno anche quelli.

RECORD

Una variabile di tipo RECORD è l'indirizzo di memoria dove il record è allocato. Il valore default è NIL, cioè il record non è allocato. Un record viene allocato quando si assegna per la prima volta un campo qualsiasi. Il valore default dei campi non assegnati è quello dei rispettivi tipi. Dereferenziare in una espressione un campo di un record non allocato comporta un errore fatale di esecuzione.

 
<= M2 per programmatori JavaKeywords =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione