Распределяет ли система память от высокого - низкого или наоборот? - PullRequest
0 голосов
/ 28 марта 2011

IIRC это должно быть high->low, но согласно этому изображению, это low->high.

enter image description here

Я сейчас в замешательстве, что происходит?

Кажется, код также выполняется из low->hight:

0x0000000000400498 <main+0>:    push   %rbp
0x0000000000400499 <main+1>:    mov    %rsp,%rbp
0x000000000040049c <main+4>:    sub    $0x10,%rsp
0x00000000004004a0 <main+8>:    movl   $0x6,-0x4(%rbp)

1 Ответ

2 голосов
/ 28 марта 2011

На Intel x86 / x64, которые являются наиболее популярными архитектурами под управлением Windows, стек «растет» в направлении младших адресов.То есть, перемещение в стек включает в себя вычитание из указателя стека (ESP), а извлечение из стека - добавление в указатель стека.

В вашем примере стек растет сверху вниз.Это пролог функции, и он использует инструкцию SUB для выделения стекового пространства для локальных переменных.Возможно, вы путаете стек с памятью, в которой хранится ваша программа - в этой области ЦП выполняет инструкции последовательно, от низкого до высокого адреса, до тех пор, пока не встретится инструкция ветвления (например, JMP).

...