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

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

Спасибо.

6
задан rkellerm 9 June 2010 в 08:01
поделиться

3 ответа

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

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

3
ответ дан 10 December 2019 в 02:42
поделиться

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

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

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

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

5
ответ дан 10 December 2019 в 02:42
поделиться

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

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

1
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: