Qubc
@Qubc
Ненавижу полисемию.

Почему память в стеке для auto переменной не резервируется с помощью rsp?

А почему память не резервируется с помощью rsp? А если произойдет прерывание? Или тут какая-то хитрость?

int main(void) {
  int a = 5;
  return 0;
}


main:
        pushq   %rbp
        movq    %rsp, %rbp
        movl    $5, -4(%rbp)
        movl    $0, %eax
        popq    %rbp
        ret

Вот тут всё ок и понятно.
void f(void){
  ;
}
int main(void) {
  int a = 5;
  f();  
  return 0;
}

f:
        pushq   %rbp
        movq    %rsp, %rbp
        nop
        popq    %rbp
        ret
main:
        pushq   %rbp
        movq    %rsp, %rbp
        subq    $16, %rsp
        movl    $5, -4(%rbp)
        call    f
        movl    $0, %eax
        leave
        ret
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
@galaxy
Не уверен, что понял правильно вопрос. Видимо, вам непонятно, почему в первом примере нет аналога subq $16, %rsp?
Потому что не надо. rsp все равно никак функцией main не используется, была бы просто лишняя пара инструкций.
Во втором примере rsp нужно настраивать, т.к. есть вызов f(), и нельзя, чтобы она лезла в стек main().
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
А почему память не резервируется с помощью rsp? А если произойдет прерывание? Или тут какая-то хитрость?


Тут какая-то хитрость под названием red zone.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
13 нояб. 2024, в 18:37
10000 руб./за проект
15 нояб. 2024, в 21:11
15000 руб./за проект
15 нояб. 2024, в 20:37
5000 руб./за проект