18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

500<br />

510<br />

520<br />

530<br />

540<br />

550<br />

560<br />

570<br />

580<br />

0 1 2 3 4 5 6 7 8 9<br />

elemento 3<br />

elemento 8<br />

elemento 0<br />

elemento 5<br />

elemento 10<br />

elemento 2<br />

elemento 7<br />

elemento 4<br />

elemento 9<br />

Figura 18.1: Esempio di memorizzazione di una struttura sequenziale.<br />

Mentre l’indirizzo dell’elemento xi si otterrà dal calcolo:<br />

addr(xi) = addr(x0) + i ∗ d<br />

elemento 1<br />

elemento 6<br />

elemento 11<br />

La lunghezza m deve essere fissata e non può essere modificata. La struttura sequenziale è<br />

quindi una struttura rigida, adatta a contenere serie di dati il cui numero sia noto a priori, o <strong>per</strong><br />

cui si possa prevedere un limite su<strong>per</strong>iore.<br />

In Figura 18.1 è rappresentato un esempio di memorizzazione di una struttura sequenziale<br />

composta da 12 elementi di dimensione pari a 6 blocchi elementari ciascuna (gli indici variano da<br />

0 a 11). Si noti che le dimensioni vengono espresse in “blocchi elementari” e non di byte, in quanto<br />

la dimensione del blocco elementare dipende dall’architettura del calcolatore in uso. Tipicamente<br />

si hanno valori di 8, 16, 32 e 64 bit <strong>per</strong> blocco elementare. Nell’esempio, l’indirizzo del primo<br />

elemento è addr(x0) = 500, mentre l’indirizzo dell’i-esimo elemento è addr(xi) = 500 + 6 ∗ i. Ad<br />

esempio, l’indirizzo di partenza dell’elemento x8 è pari a 500 + 6 ∗ 8 = 548.<br />

Nel caso in cui gli elementi abbiamo diversa lunghezza, si possono adottare due soluzioni:<br />

1. normalizzare le lunghezze degli elementi riportandole <strong>alla</strong> lunghezza dell’elemento più lungo<br />

2. dotare ogni elemento delle informazioni sufficienti a determinare l’indirizzo dell’elemento<br />

successivo (ad esempio un numero che rappresenta la lunghezza dell’elemento)<br />

Si supponga di voler memorizzare 12 elementi di dimensione variabile tra 2 e 6 blocchi elementari.<br />

Se si adotta la prima soluzione, una possibile allocazione della memoria è la stessa che<br />

nell’esempio di Figura 18.1. Ciascun blocco è infatti stato ridimensionato sulla base dell’elemento<br />

più lungo, che è proprio di 6 blocchi elementari. La stessa struttura è stata memorizzata con la<br />

seconda tecnica, e una sua possibile allocazione è stata rappresentata in Figura 18.2. A ciascun<br />

blocco di dati è stato aggiunto un blocco iniziale nel quale viene memorizzata la lunghezza totale<br />

dell’elemento, esclusa l’intestazione. Come si può notare, anche se nel caso pessimo un elemento<br />

può raggiungere la dimensione di 7 blocchi, l’occupazione totale di memoria è inferiore al<br />

caso precedente. La scelta di una tecnica piuttosto che l’altra dipenderà quindi da considerazioni<br />

165

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!