Альтернативы C соглашение о вызовах? Хорошие Ресурсы? Преимущества недостатки? - PullRequest
0 голосов
/ 02 апреля 2012

Я действительно только знаком с соглашением о вызовах C в настоящее время (как описано в Соглашение о вызовах Nasm - C ). Этот же источник также описывает соглашение о вызовах в стиле Pascal.

Я пытаюсь понять различные соглашения о вызовах функций (описание или источники)? Кроме того, каковы преимущества или недостатки использования одного над другим (если есть)?

ПРИМЕЧАНИЕ. Больше всего интересует платформа x86, но вы можете описать другие.

1 Ответ

2 голосов
/ 02 апреля 2012

Большим преимуществом соглашения о вызовах C являются:

  1. обработка varargs.С соглашением о вызовах C, вызывающий объект помещает в стек и вылетает - и вызывающий знает, сколько аргументов они передали, так как они выполняют передачу.В противном случае вызываемый должен как-то это понять.Конечно, в любом случае, если они хотят использовать varargs, но зачем давать им шанс разбить стек, если они ошибаются?Таким образом, языки, которые очищают вызываемый, как правило, не поддерживают varargs.
  2. ваш код совместим с C (и большинством C ++).Вы не много слышите о glibpascal, не так ли?Я так не думал.

Вызов на основе регистров также полезен, и я думаю, что многие компиляторы C делают это для оптимизации, а не помещают целые / указатели в стек - но не для видимых извнефункции в библиотеках, конечно же!

Весь смысл соглашений состоит в том, что они условные .Имеет смысл следовать соглашению, потому что тогда другие люди, которые подчиняются соглашению, знают, чего ожидать.Так что действительно, не задумывайтесь над этим.Это тот случай, когда следование за толпой приносит ощутимую пользу.

...