В сборке x86-64 я вижу что-то подобное для своей основной функции ...
push %rbp
mov %rsp, %rbp
mov %edi,-0x14(%rbp)
mov %rsi,-0x20(%rbp)
movl $0x0,-0x4(%rbp)
movl $0x0,-0x8(%rbp)
Обратите внимание, что первым делом он бросает базовый указатель в стек.Затем он перемещает старую вершину стека (rsp) в базовый регистр ptr.
Вот мой вопрос, последние две строки инициализируют локальные переменные равными 0. Они имеют смещение -4 и -8с базы птр.НО ... если старый базовый указатель находится по смещению 0 от нового базового ptr, как это может быть?Старый базовый указатель должен иметь длину 8 байт, поскольку это 64-битный компьютер.Поэтому локальные переменные не должны начинаться до -0x8 (rbp).