¿Alguien puede explicar lo que son y por qué los necesitaría? ¿Qué tipo de aplicaciones estoy desarrollando si necesito usar intrínsecos?¿Qué son intrínsecos?
Respuesta
Normalmente, "intrínsecos" hace referencia a las funciones que están incorporadas, es decir, la mayoría de las funciones de biblioteca estándar que el compilador puede/generará en línea en lugar de llamar a una función real en la biblioteca. Por ejemplo, una llamada como: memset(array1, 10, 0)
podría ser compilado para x86 como algo parecido a:
mov ecx, 10
xor eax, eax
mov edi, offset FLAT:array1
rep stosb
intrínseco como este son puramente una optimización. Los intrínsecos "necesarios" probablemente sean una situación en la que el compilador admite intrínsecos que le permiten generar código que el compilador no puede (o normalmente no generará) generar directamente. Para un ejemplo obvio, bastantes compiladores para x86 tienen "MMX Intrinsics" que le permiten usar "funciones" que en realidad son solo representaciones directas de las instrucciones de MMX.
Los intrínsecos están expuestos por el compilador como funciones que no forman parte de ninguna biblioteca, per se.
Los que probablemente use más son intrínsecos de ensamblaje que son tratados por el compilador con la misma precisión que las instrucciones de la máquina que representan. Los usaría, por ejemplo, en un código donde necesita aprovechar una instrucción de CPU específica que el compilador no genera automáticamente, y donde no necesariamente se requiere una sección completa de ensamblaje en línea.
caso de uso: juegos de instrucciones SIMD (SSE, Altivec, Neon) donde es difícil para los compiladores averiguar dónde usarlos, pero los beneficios de la asignación de registros/la administración de cuadros de pila aún puede obtenerse de la codificación en C en lugar de en ensamblador –
Una función intrínseca es una función que el compilador implementa directamente cuando es posible, en lugar de vincularla a una implementación provista por la biblioteca de la función.
Un ejemplo común es strncpy()
.
Para cadenas cortas, realizar una llamada a la función strncpy()
, que implica configurar un 'marco de pila' con una dirección de retorno, consumirá más tiempo que la copia real de bytes. Peor aún, el efecto en los búferes de precarga de la CPU detendrá la ejecución de la CPU durante varios ciclos de reloj.
En cambio, la función intrínseca es implementada por el compilador en lugar de una llamada de función. En el ejemplo de strncpy()
, el código de copiado de bytes se emite directamente en el lugar donde se invoca strncpy()
.
Similar a este ejemplo strncpy()
, cada función intrínseca se implementa directamente como código en línea si se cumplen las restricciones necesarias.
Normalmente, todavía existe una copia no intrínseca de la función intrínseca en la biblioteca estándar, en caso de que se necesite la dirección de la función.
En comparación con las funciones en línea, la función intrínseca es proporcionada por el compilador. No hay un lugar en el código fuente de un programa C donde se escribe la función intrínseca, ni hay una implementación de biblioteca a la que deba vincularse. Una función en línea es diferente en que el compilador lee el código fuente para la función en línea, pero es similar en que luego puede emitir una traducción compilada de la función en línea directamente en el código objeto, omitiendo la sobrecarga de una llamada a función.
En resumen, la diferencia práctica entre una función intrínseca y una función en línea es que las funciones intrínsecas están "presentes" incluso si no tiene #include
el archivo de encabezado necesario que contiene la declaración de la función.Para una función en línea, el archivo de encabezado con la declaración de función debe ser #include
'd (o declarado de otro modo) primero.
'' Intrinsics '' son aquellas características de un lenguaje que un compilador reconoce e implementa sin necesidad de que el programa las declare. El compilador puede, o no puede, vincular a una biblioteca de tiempo de ejecución para realizar la operación. En C++ por ejemplo, la operación de la estructura de copia está implícita:
struct {
int a;
char b [100];
long c [27];
} s, t;
...
s = t; // this statement copies hundreds of bytes, likely with a rtl call
Otros ejemplos incluyen lenguajes como Fortran donde hay apoyo implícito para el tipo de complejo, y la trascendental (seno, tangente, etc.) funciones necesitan no- y no puede ser declarado. PHP, Javascript, Ruby, etc. tienen cientos de funciones intrínsecas, como crear y buscar matrices, realizar coincidencias de expresión regular, etc., etc.
En cuanto a sus otras preguntas, la única diferencia es si deben ser declarado. Por ejemplo, un programa en C++ usando funciones trascendentales debe incluir matemáticas declaraciones de Bibliotecas:
#include <math.h>
No hay un patrón particular de las aplicaciones que dependen de las características intrínsecas; eso es solo una cuestión de importancia para los escritores y programadores del compilador.
- 1. SSE, intrínsecos y alineación
- 2. Filtro bilineal con intrínsecos SSE4.1
- 3. SSE intrínsecos - comparación if/else optimización
- 4. ¿Qué son las cookies firmadas y por qué son útiles?
- 5. ¿Cuál es la diferencia entre los intrínsecos lógicos de SSE?
- 6. ¿Qué son los RFC?
- 7. ¿Qué son los conceptos?
- 8. ¿Qué son los futuros?
- 9. ¿Qué son iteradores, C++?
- 10. ¿Qué son skolems?
- 11. ¿Qué son ICS_R1 ICS_R2?
- 12. ¿Qué son [] en C#?
- 13. ¿Qué son modificaciones apilables?
- 14. ¿Qué son jQuery valHooks?
- 15. ¿Qué son uri, contentValues
- 16. ¿Qué son las fortunas?
- 17. g ++ SSE intrínsecos dilema - valor de intrínsecas "satura"
- 18. Rotación de 128 bits utilizando intrínsecos de ARM Neon
- 19. ¿Existe una buena referencia para los intrínsecos de ARM Neon?
- 20. Use intrínsecos SSE2 y ensamblador en línea gcc
- 21. intrínsecos de Intel AVX: ¿hay alguna biblioteca de compatibilidad disponible?
- 22. ¿Qué PEP son lecturas obligadas?
- 23. NSComparisonResult y NSComparator: ¿qué son?
- 24. ¿Qué son las API privadas
- 25. ¿Qué son los objetos anclados?
- 26. ¿Qué son prototipos en JavaScript?
- 27. ¿Qué son paddingStart y paddingEnd?
- 28. ¿Qué son _Unwind_SjLj_Unregister y _Unwind_SjLj_Register?
- 29. ¿Qué operaciones son operaciones atómicas
- 30. ¿Qué son los objetos diferidos?
http://en.wikipedia.org/wiki/Intrinsic_function – sellibitze