SIMD/SSE 代码在 Windows 8 运行 上明显崩溃 Windows 7 和 Linux

SIMD/SSE code crashes on Windows 8 running clearly on Windows 7 and Linux

我有一个应用程序 (makeahmap) 在执行 SIMD 代码时崩溃的报告:

https://github.com/artyom-beilis/makeahmap/blob/master/sources/makeahmap.cpp#L947

我无法在我的机器上使用完全相同的输入重现该问题:

问题:

  1. 什么样的工具可以帮助我找到用户电脑崩溃的原因?
  2. 可能缺少什么东西?

问题是:

  1. Windows 使用 4 字节堆栈对齐
  2. GCC 在 16 字节中使用的默认堆栈对齐方式。它修复了 main/winmain 中的对齐,但它不适用于从外部线程调用的函数,因为不能保证 16 字节对齐。

解决方案:

向从线程调用的函数添加 __attribute__((force_align_arg_pointer)) 属性。