Por que precisamos de alocação de pilha quando temos uma zona vermelha?

Eu tenho as seguintes dúvidas:

Como sabemos, o System V x86-64 ABI fornece uma área de tamanho fixo (128 bytes) no quadro da pilha, chamada redzone. Portanto, como resultado, não precisamos usar, por exemplo,sub rsp, 12. Apenas façamov [rsp-12], X e isso é tudo.

Mas não consigo entender isso. Por que isso Importa? É necessáriosub rsp, 12 sem redzone? Afinal, o tamanho da pilha é limitado no começo, então por quesub rsp, 12 é importante? Eu sei que isso nos permite seguir o topo da pilha, mas vamos ignorá-lo naquele momento.

Eu sei o que algumas instruções usamrsp valor (comoret), mas não se importe com isso naquele momento.

O cerne do problema é: não temos zona vermelha e fizemos:

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

Faz diferença com?

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

questionAnswers(2)

yourAnswerToTheQuestion