/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

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností vlastnosti konfigurace>C/C++>Generování kódu.

  3. Vyberte novou hodnotu vlastnosti Spectre Mitigation . Pokud chcete změnu použít, zvolte OK .

Programové nastavení tohoto parametru kompilátoru

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