“Spectre Mitigation”缓解错误
如果出现“Spectre Mitigation”这种错误,就要了解下PIPE技术:流水线技术,比如3级流水线,避免CPU空闲,不浪费时间,但是前提是没有跳转,指令都是顺序执行的;一旦发生跳转,流水线上的指令就错了,必须要清空哪些已经在流水线上的指令,一定不能执行错误的指令,清空流水线的代价越来越大,严重影响CPU效率;
所以为了把这种漏洞补掉,编译器在代码里面插入东西,所以在Spectre Mitigation这里打个补丁,由于编译器没有下这个补丁,所以出现上图那种错误;
其实这种漏洞很难被发现,我们一般不在乎这种漏洞,平时这里就关掉这个功能:
如果已请求使用 Spectre 缓解库(“C/C++”>“Spectre 缓解”未设置为“已禁用”),但未安装 Spectre 缓解库,则会出现此错误 。
若要修复此错误,请首先确定是否需要 Spectre 缓解。 可以在 /Qspectre 编译器选项的页面上阅读有关 Spectre 缓解的信息。 如果不需要 Spectre 缓解,请确保已将其禁用。 对于命令行生成,请确保未使用 /Qspectre
编译器选项或其变体 /Qspectre-load
和 /Qspectre-load-cf
。 若要在 Visual Studio IDE 中禁用它,请打开项目的“属性”,然后在“配置属性”>“C/C++”>“代码生成”属性页中,将“Spectre 缓解”属性设置为“已禁用”。
如果需要 Spectre 缓解,请确保已安装支持 Spectre 缓解的正确编译器和库组件。 在 Visual Studio 安装程序中,依次选择“修改”、“单个组件”,搜索“Spectre v14.2”,然后在“编译器、生成工具和运行时”部分中,确保已为生成所基于的所有体系结构选择“MSVC v142… Spectre 缓解库” 。 如果使用的是 ATL 或 MFC,请确保也为生成所基于的所有体系结构选择库(如带有 Spectre 缓解的适用于最新 v142 生成工具的 C++ MFC)(或工具集的相应版本)。
此外,若要启用 Spectre 缓解,请确保使用其中一个 /Qspectre
编译器选项。 若要在 Visual Studio IDE 中设置此属性,请打开项目的“属性”,然后在“配置属性”>“C/C++”>“代码生成”属性页中,将“Spectre 缓解”属性设置为“已启用”,或对于 /Qspectre-load 选择“所有负荷”,对于 /Qspectre-load-cf 选择“所有控制流负荷”。