2010-06-09 27 views

Respuesta

3

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 .

+0

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

5

__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.

+1

Gracias por el enlace. –

1

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.

Cuestiones relacionadas