Зачем нам нужно выделение стека, когда у нас красная зона?

У меня есть следующие сомнения:

Как мы знаем, System V x86-64 ABI дает нам область фиксированного размера (128 байт) в кадре стека, так называемую красную зону. Таким образом, в результате нам не нужно использовать, например,sub rsp, 12, Просто сделайmov [rsp-12], X и это все.

Но я не могу понять идею этого. Почему это имеет значение? Нужно лиsub rsp, 12 без красной зоны? В конце концов, размер стека ограничен в начале, так почемуsub rsp, 12 это важно? Я знаю, что это позволяет нам следовать за вершиной стека, но давайте проигнорируем это в тот момент.

Я знаю, что используют некоторые инструкцииrsp значение (какret) но не волнует это в тот момент.

Суть проблемы в том, что у нас нет красной зоны, и мы сделали:

function:
    mov [rsp-16], rcx
    mov [rsp-32], rcx
    mov [rsp-128], rcx
    mov [rsp-1024], rcx
    ret

Это разница с?

function:
    sub rsp, 1024
    mov [rsp-16], rcx
    mov [rsp-32], rcx
    mov [rsp-128], rcx
    mov [rsp-1024], rcx
    add rsp, 1024
    ret

Ответы на вопрос(2)

Ваш ответ на вопрос