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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.81
fudz1k
0 / 0 / 0
Регистрация: 01.11.2006
Сообщений: 12
#1

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

20.02.2007, 20:00. Просмотров 5687. Ответов 1
Метки нет (Все метки)

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

Передача параметров в функцию - C++
Как понять , что передаётся в функцию при такой записи : void Fun(str* &r) при этом есть такие данные: struct str {int b; ...

Передача параметров в функцию - C++
Люди помогите, пожалуйста. Есть такая простая задачка: В одномерном массиве, состоящем из n элементов вычислить произведение...

Передача параметров в функцию - C++
Толи я чего-то туплю, толи всё же в мейн ошибка. Итак: есть функция, которая должна сообщать о результатах поиска изменением переменных...

Передача параметров в функцию - C++
void f(int a) ; // передача по значению void f(int *a);//передача по ссылке void f(int &a) ; // а если так написано - что это...

передача параметров в функцию - C++
Здарвствуйте! Неделю изучаю С++, и в книге по которой изучаю сказано: "Передавать параметры по значению только при необходимости и...

Передача параметров в функцию - C++
Можно ли сделать так, чтобы при совпадении переменных в функцие и основной программе, значения изменялись и в основной программе? И еще,...

Передача параметров в функцию - C++
Добрый вечер Не получается передать в функцию массив выдает ошибку #include <cstdio> struct morse_code { const char*...

Передача параметров в функцию по умолчанию - C++
Передача параметров в функцию по умолчанию. Написать встроенную функцию, которая считает площадь квадрата со стороной А, если известно, что...

Передача параметров в функцию WndProc - C++
Начал осваивать WinAPI и столкнулся со следующей проблемой - необходимо передать в качестве параметров некоторые переменные в функцию...

Передача параметров в функцию по умолчанию - C++
Здравствуйте! Вот в этом коде: #include <iostream> #include <fstream> #include <string> using namespace std; struct Book...

Передача параметров в коллбэк функцию - C++
Есть библиотека для ардуино, таймеры с вызовом функций. Подскажите как добавить возможность пtредачи параметров? ...

Передача параметров в функцию по адресу - 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 ничего хорошего не дает.
Ответ Создать тему
Опции темы

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