Форум программистов, компьютерный форум CyberForum.ru

Передача параметров в функцию - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.81
fudz1k
0 / 0 / 0
Регистрация: 01.11.2006
Сообщений: 12
20.02.2007, 20:00     Передача параметров в функцию #1
Кто может подсказать как работает метод __fastcall.И как связан стэк и управление им в с++(желательно на Visual C++.NET
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2007, 20:00     Передача параметров в функцию
Посмотрите здесь:

C++ Передача параметров в функцию
Передача параметров в функцию WndProc C++
C++ передача параметров в функцию
C++ Передача параметров в функцию
Передача параметров в функцию по адресу C++
C++ Передача параметров в функцию
C++ Передача параметров в функцию по умолчанию
C++ Передача неопределенного числа параметров в функцию
C++ Передача параметров в функцию по умолчанию
Передача параметров в функцию C++
C++ Передача параметров в функцию
Передача параметров в функцию C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
1doma
Сообщений: n/a
20.02.2007, 23:18     Передача параметров в функцию #2
Реальная проблема (во всяком случае, из тех, которые мне известны) лишь в том, что fastcall не столь стандартизирован, как cdecl или stdcall - в компиляторах Microsoft и Borland (Watcom тоже, но про него я знаю мало) он реализован по разному:
- Microsoft: передача первых двух параметров в регистрах ecx и edx, остальные через стек справа-налево (как cdecl или stdcall);
- Borland: передача первых трех параметров в регистрах eax, edx и ecx, остальные через стек _слева-направо_ (как pascal; читал, что Borland впервые ввела этот тип в Delphi).

В результате могут возникнуть сложности при использовании библиотек РАЗНЫХ компиляторов. Хотя, fastcall практически не используется для экспорта, так что вероятность нарваться на такое невелика.

По скорости в типичных приложениях fastcall на ~2% быстрее cdecl. Можно выиграть в скорости, создавая безфреймовые функции. С другой стороны, вызываемая функция может "испортить" содержимое регистра, следовательно, его требуется где-то сохранять, а это тоже потеря...

Разумеется fastcall имеет смысл, когда функция сразу использует данные в регистрах по назначению без необходимости их пушить в стек, а затем заново извлекать. А если в начале функции идет вызов API или чего другого, то регистры приходится все равно пушить\попить, если они еще понадобятся.

Поэтому подход должен быть индивидуальным. Fastcall рулит для простых и быстрых функций, которые сразу используют переданные параметры без необходимости их пушить в стек. Если же регистры приходится пушить, или функция имеет большое число параметров, или работает она сравнительно долго, то fastcall ничего хорошего не дает.
Yandex
Объявления
20.02.2007, 23:18     Передача параметров в функцию
Ответ Создать тему
Опции темы

Текущее время: 05:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru