Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача аргументов в регистрах  (Прочитано 9218 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Daniloff
Помогающий

ru
Offline Offline

« : 11-01-2007 17:40 » 

можно ли на VC++ заставить компилятор передавать аргументы в регистрах?
Знаю что есть модификаторы cdecl, stdcall, pascal - для регистрового обмена тоже нужен один из них?
Или VC в принципе так не умеет?  Быть такого не может
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 11-01-2007 18:29 » 

Daniloff, зависит от компилятора. В Borland используется атрибут __fastcall для определения ф-ии. В других компиляторах - не знаю. Следует посмотреть доку по каомпилятору.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 12-01-2007 04:50 » 

В VC++ 6.0 так же __fastcall.
Его можно установить в свойствах проекта или при определении функции указывать данный метод вызова.
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 12-01-2007 12:01 » 

А зачем нужно на современных процессорах передавать параметры через регистры? 

Доступ к данным, размещённым в кэше и пред-загрузка данных из памяти в конвейре, ИМХО, позволяют вызывать функцию той же скоростью, что и при передаче параметров через регистры. Есть какие-то фактические данные, которые показывают, что вызов с передачей параметров через регистры происходит быстрее, чем вызов с передачей параметров через память?
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Daniloff
Помогающий

ru
Offline Offline

« Ответ #4 : 14-01-2007 20:10 » 

А зачем нужно на современных процессорах передавать параметры через регистры? 

Просто вызываемая процедура пишется на Ассемблере и для перекачки аргументов в регистры приходится добавлять в код лишние строки...
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 15-01-2007 04:47 » 

Просто вызываемая процедура пишется на Ассемблере и для перекачки аргументов в регистры приходится добавлять в код лишние строки...
Если пишишь функцию на асемблере, то тем более для этой функции используй 'C'-ный метод вызовов функций и возвращения результата.
Т.е. все параметры через стек, результат в 'eax'.
« Последнее редактирование: 13-12-2007 21:03 от Алексей1153++ » Записан
Daniloff
Помогающий

ru
Offline Offline

« Ответ #6 : 21-01-2007 16:22 » 

Если пишишь функцию на асемблере, то тем более для этой функции используй 'C'-ный метод вызовов функций и возвращения результата.
Т.е. все параметры через стек, результат в 'eax'.

Не вижу смысла... Зачем что-то мудрить со стеком, если можно просто передать 2-3 аргумента в регистрах? Кстати, __fastcall отлично работает, спасибо за подсказку! Улыбаюсь
« Последнее редактирование: 13-12-2007 21:03 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines