Intrínsecos do compilador
A maioria das funções estão contidas nas bibliotecas, mas algumas funções são internos (isto é, intrínsecos) para o compilador.Esses são chamados de funções intrínsecas ou intrínsecos.
Comentários
Se uma função for uma intrínseca, o código para essa função é normalmente embutida, evitando a sobrecarga de uma chamada de função e permitindo que as instruções de máquina altamente eficiente a ser emitido para essa função.Uma intrínseca geralmente é mais rápida do que o assembly in-line equivalente, porque o otimizador tem um conhecimento interno de se comportar como muitas intrínsecos, portanto algumas otimizações podem ser disponíveis que não estão disponíveis quando o assembly embutido é usado.Além disso, o otimizador pode expandir o intrínseca diferente, alinhar buffers diferente ou fizer outros ajustes dependendo do contexto e argumentos da chamada.
O uso de intrínsecos afeta a portabilidade do código, pois intrínsecos que estão disponíveis no Visual C++ podem não estar disponíveis se o código é compilado com outros compiladores e alguns intrínsecos podem estar disponíveis para algumas arquiteturas de destino não estão disponíveis para todas as arquiteturas.No entanto, intrínsecos são geralmente mais portátil de assembly embutido.Os intrínsecos são necessárias em arquiteturas de 64 bits, onde não há suporte para montagem embutida.
Alguns intrínsecos, como __assume e __ReadWriteBarrier, fornecer informações para o compilador, que afeta o comportamento do otimizador.
Alguns intrínsecos estão disponíveis apenas como intrínsecos e alguns estão disponíveis tanto em função e implementações intrínsecas.Você pode instruir o compilador para usar a implementação intrínseca de uma destas duas maneiras, dependendo se você deseja habilitar somente funções específicas ou para habilitar todos os intrínsecos.The first way is to use #pragma intrinsic(intrinsic-function-name-list).O pragma pode ser usado para especificar um único intrínseco ou vários intrínsecos separados por vírgulas.O segundo é usar o /Oi (gerar funções intrínsecas) opção de compilador, que disponibiliza todos os intrínsecos em uma plataforma.Em /Oi, use #pragma function(intrinsic-function-name-list) para forçar uma chamada de função a ser usado em vez de uma intrínseca.Se a documentação para uma determinada intrínseca de anotações que a rotina só está disponível como uma intrínseca, implementação intrínseca é usada independentemente do /Oi ou #pragma intrinsic é especificado.Em todos os casos, /Oi ou #pragma intrinsic permite, mas não força o otimizador para usar o intrínseco.O otimizador ainda poderá chamar a função.
Algumas funções de biblioteca de C/C++ padrão estão disponíveis em implementações intrínsecas em algumas arquiteturas.Ao chamar uma função CRT, a implementação intrínseca é usada se /Oi é especificado na linha de comando.
Está disponível um arquivo de cabeçalho, Intrin.h, que declara protótipos para as funções intrínsecas.Além disso, determinados cabeçalhos Windows declarar funções que mapeiam para um compilador intrínseco.
As seções a seguir listam todos os intrínsecos que estão disponíveis em várias arquiteturas.Para obter mais informações sobre como os intrínsecos funcionam no seu processador de destino específico, consulte a documentação de referência do fabricante.