是否有以下手动修复的替代方法:

// 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字节整数。

09-26 18:56