Intrínsecos del controlador

La mayoría de las funciones está recogida en bibliotecas, pero algunas funciones están incorporadas en el compilador (es decir, son intrínsecas). Estas se conocen como funciones intrínsecas o intrínsecos.

Comentarios

Si una función es un intrínseco, el código de dicha función suele estar insertado, con lo que se evita la sobrecarga de una llamada de función y se emiten instrucciones de código máquina altamente eficientes para dicha función. Un intrínseco suele ser más rápido que el ensamblado en línea equivalente, ya que el optimizador tiene un conocimiento integrado de cómo se comportan numerosos intrínsecos, por lo que pueden estar disponibles algunas optimizaciones de las que no se dispone cuando se utiliza el código ensamblado en línea. Además, el optimizador puede expandir el intrínseco de forma diferente, alinear los búferes de forma diferente o realizar otros ajustes según el contexto y los argumentos de la llamada.

El uso de intrínsecos afecta a la portabilidad del código, ya que los intrínsecos que están disponibles en Visual C++ podrían no estar disponibles si el código se compila con otros compiladores, y algunos intrínsecos que podrían estar disponibles para ciertas arquitecturas de destino no están disponibles para todas las arquitecturas. Sin embargo, los intrínsecos son generalmente mucho más portátiles que el ensamblado en línea. Los intrínsecos son necesarios en las arquitecturas de 64 bits donde no se admite el ensamblado en línea.

Algunos intrínsecos, como __assume y __ReadWriteBarrier, proporcionan información al compilador, lo que afecta al comportamiento del optimizador.

Algunos intrínsecos están disponibles solo como tal, mientras que otros están disponibles en implementaciones de intrínseco y de función. Puede indicarle al compilador que utilice la implementación de intrínseco de dos maneras, en función de si desea habilitar solo funciones específicas o de si desea habilitar todos los intrínsecos. La primera forma es usar #pragma intrinsic(#pragma intrinsic() . La directiva pragma puede utilizarse para especificar un solo intrínseco o varios intrínsecos separados por comas. La segunda es usar la opción del compilador /Oi (Generar funciones intrínsecas), que hace que todos los intrínsecos de una plataforma determinada estén disponibles. En /Oi,use intrinsic-function-name-list para forzar que se use una llamada de función en lugar de una intrínseca. Si la documentación de un intrínseco específico indica que la rutina solo está disponible como intrínseco, se usa la implementación intrínseca independientemente de si se especifica /Oi o . En todos los casos, /Oi o permite, pero no obliga, al optimizador a usar el intrínseco. El optimizador todavía puede llamar a la función.

Algunas funciones de biblioteca estándar de C o C++ están disponibles en las implementaciones de intrínseco de algunas arquitecturas. Al llamar a una función de CRT, se usa la implementación intrínseca si se especifica /Oi en la línea de comandos.

Hay disponible un archivo de < encabezado, intrin.h, > que declara prototipos para las funciones intrínsecas comunes. Los intrínsecos específicos del fabricante están disponibles en los < archivos de encabezado immintrin.h y >< ammintrin.h. > Además, algunos encabezados de Windows declaran funciones que se asignan a un intrínseco del compilador.

En las secciones siguientes se enumeran todos los intrínsecos que están disponibles en varias arquitecturas. Para obtener más información acerca de cómo funcionan los intrínsecos en un procesador de destino determinado, consulte la documentación de referencia del fabricante.

Vea también

Referencia del ensamblador de ARM
Referencia de Macro Assembler de Microsoft
Palabras clave
Referencia de la biblioteca en tiempo de ejecución de C