¿Ha tenido algún caso de uso real para utilizar la llamada rápida de convención de llamadas?¿Algún caso de uso real para usar la llamada a la convención de llamada rápida?
Gracias.
¿Ha tenido algún caso de uso real para utilizar la llamada rápida de convención de llamadas?¿Algún caso de uso real para usar la llamada a la convención de llamada rápida?
Gracias.
Here es un artículo que explica cuándo utilizar fastcall. En realidad, especifica un caso cuando en realidad tienen más remedio que usarlo:
Algunas clases de VCL, como TList, permiten especificar una función de devolución de llamada (una rutina tipo en el caso de TList). Deberá usar la palabra clave __fastcall en este caso, también, como lo espera la VCL .
Gracias. Como nota al margen: de su artículo, en "¿Es __fastcall realmente rápido?" sección: "La conclusión con mis pruebas fue que la convención de llamadas de registro no era más rápida que la convención de llamadas de C y era, en la mayoría de los casos, más lenta. De acuerdo, las diferencias en el tiempo son mínimas pero me demostré a mí mismo que ser difícil para los defensores de __fastcall afirmar que la convención de llamadas de registro es más rápida que cualquier otra " ..." Para repetir lo que ya he dicho, le aconsejo que nunca use __fastcall a menos que se requiera específicamente :) :) – rkellerm
__fastcall intenta pasar los argumentos de la función en los registros de la CPU en lugar de la pila si es posible, que es más rápido.
Aquí hay un enlace a un artículo de MSDN que explica la __fastcall convención de llamada: http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx
Los dos primeros DWORD o menores argumentos se pasan en ECX y EDX registros; todos los demás argumentos son pasados de derecha a izquierda.
Esto significa que esto solo funcionará para los primeros dos argumentos y solo si son < = 32 Bits.
En general, diría que no espere grandes ventajas de rendimiento de esto.
Gracias por el enlace. –
Tengo un caso en el que lo uso de manera efectiva: es una rutina de asma muy pequeña (3 instrucciones) que manipula un solo valor en un registro.
Para cualquier cosa excepto las rutinas más pequeñas y más críticas para el rendimiento, aunque la convención de llamadas realmente no debería hacer ninguna diferencia.
Claramente es más rápido, y por lo tanto mejor;). – Domenic
Consulte el artículo de referencia @luvieere: NO es más rápido ... :) – rkellerm