Compartilhar via


/Qspectre-load

Especifica a geração do compilador de instruções de serialização para cada instrução de carga. Essa opção estende o sinalizador /Qspectre, atenuando quaisquer possíveis ataques de temporização de execução especulativa com base em cargas.

Sintaxe

/Qspectre-load

Comentários

/Qspectre-load faz com que o compilador detecte cargas da memória e insere instruções de serialização depois delas. Instruções de fluxo de controle que carregam memória, incluindo RET e CALL, são divididas em um carregamento e uma transferência de fluxo de controle. O carregamento é seguido por um LFENCE para garantir que o carregamento esteja protegido. Há casos em que o compilador não consegue dividir instruções de fluxo de controle, como a instrução jmp, e usa uma técnica de mitigação alternativa. Por exemplo, o compilador atenua jmp [rax] adicionando instruções para carregar o destino de forma não destrutiva antes de inserir um LFENCE, conforme mostrado aqui:

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

Como /Qspectre-load interrompe a especulação de todas as cargas, o impacto no desempenho é alto. A mitigação não é apropriada em todos os lugares. Se houver blocos críticos de desempenho de código que não exijam proteção, você poderá desabilitar essas mitigações usando __declspec(spectre(nomitigation)). Para obter mais informações, confira __declspec spectre.

A opção /Qspectre-load está desativada por padrão e dá suporte a todos os níveis de otimização.

A opção /Qspectre-load está disponível no Visual Studio 2019 versão 16.5 e posteriores. Essa opção só está disponível em compiladores que têm como destino os processadores x86 e x64. Ela não está disponível em compiladores que tem processadores ARM como destino.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades da Configuração>C/C++>Geração de Código.

  3. Selecione um novo valor para a propriedade Mitigação do Spectre. Escolha OK para aplicar a alteração.

Para definir essa opção do compilador via programação

Confira também

/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
Opções /Q (operações de nível baixo)
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC