Как аргументы функции передаются в C? - PullRequest
5 голосов
/ 17 сентября 2011

Единственное, что я знаю о механизме передачи значений в C, это то, что это делается либо через регистр, либо через стек.

Регистрация или стек? Точно, как?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2011

Оба.И соглашения будут варьироваться в зависимости от платформы.

В x86 значения обычно передаются по стеку.На x64 предпочтительнее передавать по регистру.

Во всех случаях, если у вас слишком много параметров, некоторые из них придется передавать по стеку.1008 *

3 голосов
/ 17 сентября 2011

Обычно (некоторые компиляторы делают это иначе, как указано) для обычных вызовов функций они передаются в стек. Обычно это серия команд push, которые просто помещают данные в стек.

В особых случаях, таких как системные вызовы, параметры передаются через инструкции по сборке и регистры. В аппаратных случаях они передаются через регистры или даже определенные сигналы прерывания, которые, следовательно, записываются в регистры.

В архитектурах с большим количеством регистров они обычно передаются через регистры, такие как некоторые RISC и 64-битные архитектуры.

...