| Home / Indice sezione | www.icosaedro.it | ![]() |
|
| |||
| 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 memoriaI 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 INTEGER
Viene rappresentato con il tipo REAL
Viene rappresentato con il tipo 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 ARRAYUna 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. RECORDUna 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. | |||
| ||||
| Umberto Salsi | Contatto | Mappa | Home / Indice sezione |