Есть ли реальный вариант использования соглашения о вызовах fastcall? - PullRequest
6 голосов
/ 09 июня 2010

Был ли у вас какой-нибудь реальный вариант использования соглашения о вызовах fastcall?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 09 июня 2010

__ fastcall пытается передать аргументы функции в регистрах ЦПУ вместо стека, если это возможно, что быстрее.

Вот ссылка на статью MSDN, объясняющую соглашение о вызовах __fastcall: http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx

Первые два аргумента DWORD или меньше передаются в регистрах ECX и EDX;все остальные аргументы передаются справа налево.

Это означает, что это будет работать только для первых двух аргументов и только если они <= 32 бита. <br>В общем, я бы сказал, Донот этого не ожидайте больших преимуществ в производительности.

3 голосов
/ 09 июня 2010

Вот статья , объясняющая, когда использовать fastcall.Это фактически указывает на случай, когда у вас фактически нет альтернативы, кроме как использовать его:

Некоторые классы VCL, такие как TList, позволяют вам указать функцию обратного вызова (процедура сортировки в случае TList),В этом случае вам также придется использовать ключевое слово __fastcall, поскольку VCL ожидает этого.

1 голос
/ 09 июня 2010

У меня есть один случай, когда я эффективно его использую - это очень маленькая подпрограмма asm (3 инструкции), которая манипулирует одним значением в регистре.

Для всего, кроме самых маленьких и наиболее критичных для производительности подпрограмм, хотя соглашение о вызовах не должно иметь никакого значения.

...