Hallo Mathias,
herzlich willkommen bei der Delphi-PRAXiS!
Das Schlüsselwort
packed bewirkt genau das Gegenteil von dem, was Du möchtest, hat aber erst dann Auswirkungen, wenn mehr als ein Feld in einem Record vorhanden ist...
Zur Ausrichtung Deines Feldes auf 16 Byte-Grenzen gibt es in Delphi leider keine Compileroptionen oder Attribute bei der Deklaration. Wenn Du allerdings den Auffwand nicht scheust, könntest Du mit dynamische alloziertem Speicher arbeiten, etwa in der Form:
Delphi-Quellcode:
type
TMyMatrix = array[0..15] of Single;
PMyMatrix = ^TMyMatrix;
//...
var
myPointer: Pointer;
myMatrix : PMyMatrix;
begin
// allocate memory with 15 Bytes "extra space"
GetMem(myPointer, SizeOf(TMyMatrix)+15);
try
// calculate offset with 16 Byte alignment within memory frame
myMatrix:= PMyMatrix((Integer(myPointer)+$0F) and $FFFFFFF0);
// initialize memory
ZeroMemory(myMatrix, SizeOf(TMyMatrix));
myMatrix^[0]:= 1.0;
myMatrix^[1]:= 2.0;
// call routine with reference
DoSth(myMatrix);
finally
FreeMem(myPointer);
end;
end;
problematisch an dem Ansatz sind allerdings die "verschendeten Bytes am Ende" und die Tatsache, dass Du zu jedem Record eine weitere Referenz auf den tatsächlich alloziiertem Datenbereich halten musst.
Sicherlich ist hier etwas in der Art eines "Nodemanagers" denkbar, trotzdem bleibt ein gewisser Mehraufwand...