Ho codice seguente:Perché la dimensione di un record non è uguale alla somma delle dimensioni dei suoi campi?
type TRecord1 = record
myarr: array [0..31] of single:
end;
type TRecord2 = record
b1, b2, b3, b4, b5, b6: byte;
end;
type TRecord3 = record
myarr: array [0..31] of single:
b1, b2, b3, b4, b5, b6: byte;
end;
procedure TForm1.FormCreate(Sender: Tobject);
begin
ShowMessage(IntToStr(SizeOf(TRecord1))+'+'+IntToStr(SizeOf(TRecord2))+
'='+IntToStr(SizeOf(TRecord3)));
end;
Il programma mostra il seguente messaggio:
128+6=136
Perché è SizeOf(TRecord3)
uguale a 136 invece di 134?
regola pratica: se si prevede di utilizzare alcune strutture con i file, dichiararli come 'imballati'. – OnTheFly
La mia regola empirica non sarebbe mai scrivere le rappresentazioni binarie dei record sul file –
Sì, evita di memorizzare dati binari, ma la direttiva compressa ha i suoi usi quando i record vengono passati durante I/O (dll, comunicazione seriale ecc.). Tuttavia, l'uso di tecniche di conversione binario/stringa standardizzate dovrebbe essere applicato a nuovi sviluppi. –