是否有以下手动修复的替代方法:
// excerpt adapted from SIMDTest in
// http://www.mccauslandcenter.sc.edu/mricro/obsolete/graphics/simdtest.zip
//
var
lAdblRAp, lArraySz, lAdblRA, Doublep: LongInt;
begin
// ...
GetMem(lAdblRAp,(lArraySz * SizeOf(Double)) + 32);
lAdblRA := Doublep((Integer(lAdblRAp) and $FFFFFFF0) + 16);
// ...
end;
请注意,这段代码嵌入在过程或函数中。
最佳答案
标准方法是使用内存管理器,该内存管理器将在16个字节的边界上对齐块。 FastMM将执行此操作,但是您需要完整版本才能配置此选项。
还要注意,您问题中的代码尚不支持64位,因为它强制将指针转换为4字节整数。