R0 CREW

Объясните со стеком в c++?

Изучаю c++ в реверсе и вот для меня странно. выделяется для стековых переменных размер, но используется переменные за стеком. Объясните почему? это классы.

[0x00001120]> s 0x1209
[0x00001209]> pd 30
            ;-- main:
            0x00001209      f3             invalid
            0x0000120a      0f             invalid
            0x0000120b      1e             invalid
            0x0000120c      fa             cli
            0x0000120d      55             push rbp
            0x0000120e      4889e5         mov rbp, rsp
            0x00001211      4154           push r12
            0x00001213      53             push rbx
            0x00001214      4883ec10       sub rsp, 0x10
            0x00001218      bf08000000     mov edi, 8
            0x0000121d      e8aefeffff     call sym operator new(unsigned long) ; sym.imp.operator_new_unsigned_long
            0x00001222      4889c3         mov rbx, rax
            0x00001225      4889df         mov rdi, rbx
            0x00001228      e849010000     call method Child::Child()  ; method.Child.Child
            0x0000122d      48895de0       mov qword [rbp - 0x20], rbx
            0x00001231      bf08000000     mov edi, 8
            0x00001236      e895feffff     call sym operator new(unsigned long) ; sym.imp.operator_new_unsigned_long
            0x0000123b      4889c3         mov rbx, rax
            0x0000123e      4889df         mov rdi, rbx
            0x00001241      e830010000     call method Child::Child()  ; method.Child.Child
            0x00001246      48895de8       mov qword [rbp - 0x18], rbx
            0x0000124a      488b45e0       mov rax, qword [rbp - 0x20]
            0x0000124e      4889c7         mov rdi, rax
            0x00001251      e84c010000     call method Child::print()  ; method.Child.print
            0x00001256      488b45e8       mov rax, qword [rbp - 0x18]
            0x0000125a      4889c7         mov rdi, rax
            0x0000125d      e8d8000000     call method Base::print()   ; method.Base.print
            0x00001262      b800000000     mov eax, 0
        ┌─< 0x00001267      eb3e           jmp 0x12a7
        │   0x00001269      f3             invalid
[0x00001209]> 

push r12 - в стеке -08
push rbx - в стеке -10
sub rsp, 0x10 - две локальные переменные в стеке
var_qword_1 - в стеке -18
var_qword_2 - в стеке -20

так что все в рамках выделенного фрейма