Короткий обзор из блога Раймонда Чена:
Отличная вещь о звонках
соглашения на платформе x86
что есть из чего выбирать!
Соглашение о вызовах C (__cdecl)
Соглашение о вызове C ограничено, поскольку оно позволяет использовать функции с переменным числом параметров. Это в значительной степени требует, чтобы стек очищался вызывающей стороной, а параметры передавались справа налево, чтобы первый параметр находился в фиксированной позиции относительно вершины стека. В итоге: вызывающая сторона очищает стек, параметры передаются справа налево.
Соглашение о вызовах Паскаля (__pascal )
Pascal не поддерживает функции с переменным числом параметров, поэтому он может использовать соглашение о чистоте вызываемого абонента. Параметры вводятся слева направо. Почти все функции Win16 экспортируются как соглашение о вызовах Pascal. Соглашение о чистом вызове экономит три байта в каждой точке вызова с фиксированными издержками в два байта на функцию. Это было также немного быстрее. На Win16 экономия нескольких сотен байтов и нескольких циклов была большой проблемой. Примечание. Соглашение о вызовах Фортрана (__fortran) такое же, как соглашение о вызовах Паскаля