我正在使用 Windows 10、Visual Studio 2019、平台:x64,并且在单文件 Visual Studio 解决方案中具有以下测试脚本:
#include <iostream>
#include <intrin.h>
using namespace std;
int main() {
unsigned __int64 mask = 0x0fffffffffffffff; //1152921504606846975;
unsigned long index;
_BitScanReverse64(&index, mask);
if (index != 59) {
cout << "Fails!" << endl;
return EXIT_FAILURE;
}
else {
cout << "Success!" << endl;
return EXIT_SUCCESS;
}
}
在我的属性解决方案中,我将“启用增强指令集”设置为“高级矢量扩展 2 (/arch:AVX2)”。使用 msvc 编译时(将“平台工具集”设置为“Visual Studio 2019 (v142)”),代码返回 EXIT_SUCCESS,但是使用 clang-cl 编译时(将“平台工具集”设置为“LLVM (clang-cl)”)我得到了EXIT_FAILURE。在调试 clang-cl 运行时,index 的值是 4,而它应该是 59。这表明 clang-cl 正在读取与 MSVC 方向相反的位。
当我将“启用增强指令集”设置为“未设置”时,情况并非如此。在这种情况下,MSVC 和 clang-cl 都返回 EXIT_SUCCESS。
在所有情况下,所有 dll 都加载并显示在调试输出窗口中来自 C:\Windows\System32###.dll。
有人理解这种行为吗?我会很感激这里的任何见解。
编辑:我之前没有提到:我用 IntelCore i7-3930K CPU @3.20GHz 编译了这个。