Если вы используете новые версии Delphi (я тестировал с XE и XE2), лучший и самый простой способ - это вызвать SetMinimumBlockAlignment(mba16Byte)
на первом месте в вашем коде.
Затем вызвать обычныйGetMem
, New
или любую функцию выделения памяти и убедитесь, что адрес выровнен по 16-байтовым границам
Редактировать:
Также, если вы предпочитаете использовать ручнойИсправьте, лучший эффективный способ, который тратит меньше памяти, заключается в следующем:
var
lArraySz: LongInt;
lAdblRAp, lAdblRA: Pointer;
begin
// ...
GetMem(lAdblRAp,(lArraySz * SizeOf(Double)) + 16);
lAdblRA := Pointer((Integer(lAdblRAp) + 15) and $FFFFFFF0));
// ...
end;
Он будет использовать на 16 байт меньше для каждого выделения.