/Qspectre-load-cf

Určuje generování kompilátoru serializace instrukcí pro všechny instrukce toku řízení, které obsahují zatížení. Tato možnost provádí podmnožinu zmírnění rizik provedených možností /Qspectre-load .

Syntaxe

/Qspectre-load-cf

Poznámky

/Qspectre-load-cf způsobí, že kompilátor zjistí JMP, RETa CALL řídicí-tok instrukce, které se načítají z paměti, a vložit serializace instrukce po načtení. Pokud je to možné, tyto pokyny jsou rozdělené 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 instrukce, jako JMP je například instrukce, takže používá alternativní techniku zmírnění. 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-cf zastaví spekulaci všech zatížení v pokynech k řízení toku, je dopad na výkon 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)).

Možnost /Qspectre-load-cf je ve výchozím nastavení vypnutá a podporuje všechny úrovně optimalizace.

Možnost /Qspectre-load-cf 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
Možnosti /Q (operace nízké úrovně)
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC