#c #stack #callstack #function-call
#c #стек #callstack #вызов функции
Вопрос:
int f(int a, int b){
return a b;
}
int main(){
f(1,2);
}
В этом примере при вызове функции f
отсутствует конкретная переменная, хранящая результат сложения a
и b
. Мой вопрос: где a b
будет сохранен результат?
Комментарии:
1. В типичном ABI
int
оно будет возвращено в регистр процессора. Для больших возвращаемых типов, которые не помещаются в регистр, фактически существует скрытыйvoid*
параметр памяти, предоставляемый вызывающим объектом; функция помещает возвращаемое значение в эту память. Для получения подробной информации обратитесь к документации вашего компилятора — точный механизм зависит от реализации.2. Ответ здесь варьируется в зависимости от компилятора и операционной системы. Стандарт C не предъявляет особых требований.
Ответ №1:
оно будет перемещено во временные регистры.
он загрузит значения, затем вызовет f(int,int) посмотрите на разборку:
Комментарии:
1. Спасибо, я новичок в этом, какой инструмент вы используете для отображения кода дизассемблирования?
2. Вы можете использовать compiler Explorer (godbolt), он бесплатный и доступен онлайн