Требуется ли для выполнения функции C без аргументов и возвращаемого значения стек? - PullRequest
0 голосов
/ 04 марта 2019

Нужна ли нижеследующая функция стек для выполнения?

int a;
void func(void)
{
    a = 10;
}

1 Ответ

0 голосов
/ 04 марта 2019

Пока компилятор C может видеть определение func, он может 1 реализовать func без использования стекового пространства.Например, когда он видит вызов func, он может реализовать это, испустив одну или две команды, чтобы переместить 10 в a.Это дало бы тот же результат, что и вызов func в качестве подпрограммы, поэтому правила C позволяют реализации C реализовать вызов func таким образом и не использовать пространство стека.

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

Кроме того, если вызываемая подпрограмма была более сложной, компилятор может решить не реализовывать ее встроенным образом или не сможет это сделать.(Например, если func содержит вызовы к себе, компилятор, как правило, не может реализовать его со встроенным кодом во всех ситуациях; компилятор должен будет реализовать его с помощью актуальных инструкций вызова подпрограммы, которые используют пространство стека.)

Сноска

1 Вопрос о том, будет ли какой-либо конкретный компилятор реализовывать func без использования стекового пространства, зависит от компилятора, параметров, используемых для компиляции, идругие факторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...