Partager via


/Qspectre-load-cf

Spécifie la génération du compilateur d’instructions de sérialisation pour chaque instruction de flux de contrôle qui contient une charge. Cette option effectue un sous-ensemble des atténuations effectuées par l’option /Qspectre-load .

Syntaxe

/Qspectre-load-cf

Notes

/Qspectre-load-cf provoque la détection JMP, RETet CALL les instructions de flux de contrôle qui se chargent à partir de la mémoire, et insère des instructions de sérialisation après la charge. Si possible, ces instructions sont divisées en un transfert de flux de chargement et de contrôle. La charge est suivie d’un LFENCE élément pour vous assurer que la charge est protégée. Il existe des cas où le compilateur ne peut pas fractionner des instructions, telles que l’instruction JMP , afin qu’il utilise une autre technique d’atténuation. Par exemple, le compilateur atténue en ajoutant des jmp [rax] instructions pour charger la cible de manière nonstructive avant d’insérer une LFENCE, comme illustré ici :

    xor rbx, [rax]
    xor rbx, [rax]  ; force a load of [rax]
    lfence          ; followed by an LFENCE
    jmp [rax]

Étant donné que /Qspectre-load-cf arrête la spéculation de toutes les charges dans les instructions de flux de contrôle, l’impact sur les performances est élevé. L’atténuation n’est pas appropriée partout. S’il existe des blocs de code critiques de performances qui ne nécessitent pas de protection, vous pouvez désactiver ces atténuations à l’aide __declspec(spectre(nomitigation))de .

L’option /Qspectre-load-cf est désactivée par défaut et prend en charge tous les niveaux d’optimisation.

L’option /Qspectre-load-cf est disponible dans Visual Studio 2019 version 16.5 et versions ultérieures. Cette option est disponible uniquement dans les compilateurs qui ciblent des processeurs x86 et x64. Il n’est pas disponible dans les compilateurs qui ciblent les processeurs ARM.

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés De configuration>C/C++>Génération de code.

  3. Sélectionnez une nouvelle valeur pour la propriété Spectre Mitigation . Choisissez OK pour appliquer le changement.

Pour définir cette option du compilateur par programmation

Voir aussi

/Qspectre
/Qspectre-jmp
/Qspectre-load
Options /Q (opérations de bas niveau)
Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC