/Qspectre-load
Určuje generování kompilátoru serializace instrukcí pro každou instrukci načtení. Tato možnost rozšiřuje příznak /Qspectre , což snižuje riziko všech možných spekulativních útoků na straně spuštění na základě zatížení.
Syntaxe
/Qspectre-load
Poznámky
/Qspectre-load způsobí, že kompilátor zjistí zatížení z paměti a za ně vloží serializaci instrukcí. Instrukce toku řízení, které načítají paměť, včetně RET
a CALL
, jsou rozděleny na zatížení a přenos toku řízení. Zatížení následuje LFENCE
za účelem zajištění ochrany zatížení. Existují případy, kdy kompilátor nemůže rozdělit pokyny k toku řízení, jako jmp
je například instrukce, takže používá alternativní metodu zmírnění rizik. Kompilátor se například zmírní jmp [rax]
přidáním pokynů pro načtení cíle nedestruktivním způsobem před vložením LFENCE, jak je znázorněno tady:
xor rbx, [rax]
xor rbx, [rax] ; force a load of [rax]
lfence ; followed by an LFENCE
jmp [rax]
Vzhledem k tomu, že /Qspectre-load zastaví spekulaci všech zatížení, dopad na výkon je vysoký. Zmírnění rizik není vhodné všude. Pokud existují kritické bloky výkonu kódu, které nevyžadují ochranu, můžete tato omezení rizik zakázat pomocí __declspec(spectre(nomitigation))
. Další informace naleznete v tématu __declspec spectre.
Možnost /Qspectre-load je ve výchozím nastavení vypnutá a podporuje všechny úrovně optimalizace.
Možnost /Qspectre-load je dostupná v sadě Visual Studio 2019 verze 16.5 a novější. Tato možnost je dostupná pouze v kompilátorech, které cílí na procesory x86 a x64. Není k dispozici v kompilátorech, které cílí na procesory ARM.
Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností vlastnosti konfigurace>C/C++>Generování kódu.
Vyberte novou hodnotu vlastnosti Spectre Mitigation . Pokud chcete změnu použít, zvolte OK .
Programové nastavení tohoto parametru kompilátoru
- Viz třída AdditionalOptions.
Viz také
/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
/Q – možnosti (operace nízké úrovně)
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC