About me| Chi sono?| BLOG
Chiara| Paola| Valentina| Francesca
Home| Download| Poesie | Poems| Immagini | Pictures| Articoli | Papers| Winamp Plugins
English
› Home › Download › Poems › Pictures » Technical Papers › Winamp Plugins
Italiano
› Principale › Download › Poesie › Immagini » Articoli IoProgrammo › Plugins per Winamp

Allineamento dati - Data alignment and ordering

Molti programmatori alle prime armi ignorano il concetto di data alignment... Potete consultare un'introduzione all'argomento cliccando sul link seguente: Byte alignment and ordering.

Nel seguente codice Pascal i due record sembrano uguali ma le loro dimensioni risultano diverse...

program Test;

{$APPTYPE Console}

type 
  StrutturaNonOttimizzata = record
    b1: Byte;
    i1: Integer;
    b2: Byte;
    i2: Integer;
    b3: Byte;
  end;
  
{

			Struttura non ottimizzata:
			|b1 * * *| |i1| |b2 * * *| |i2| |b3 * * *|
			
			5 x 4 (allineamento a 32 bit = 4 byte) = 20
			
			* = bytes sprecati

}


type 
  StrutturaOttimizzata = record
    b1, b2, b3: Byte;
    i1, i2: Integer;
  end;

{

			Struttura ottimizzata:
			|b1 b2 b3 *| |i1| |i2|
			
			3 x 4 = 12
			
			* = bytes sprecati (in questo caso solo uno!)

}


begin
    Writeln('Dimensione struttura NON ottimizzata: ', SizeOf(StrutturaNonOttimizzata));
    Writeln('--------------------------------------');
    Writeln('Dimensione struttura ottimizzata: ', SizeOf(StrutturaOttimizzata));  
    Readln; // Premi il tasto INVIO per terminare...
end.

Output: 

Dimensione struttura NON ottimizzata: 20 
-------------------------------------- 
Dimensione struttura ottimizzata: 12 
Click here - Clicca qui