I am trying to understand how a variable sized static array work internally:
Following is a fixed size static array in C and its Assembly equivalent;
int main(){int arr[2] = {3};}================main: push rbp mov rbp, rsp mov QWORD PTR [rbp-8], 0 mov DWORD PTR [rbp-8], 2 mov eax, 0 pop rbp ret
However a variable sized array is shown below
int main(){int varSize ;int Arr[varSize];}=================main: push rbp mov rbp, rsp sub rsp, 32 mov rax, rsp mov rcx, rax mov eax, DWORD PTR [rbp-4] movsx rdx, eax sub rdx, 1 mov QWORD PTR [rbp-16], rdx movsx rdx, eax mov r8, rdx mov r9d, 0 movsx rdx, eax mov rsi, rdx mov edi, 0 cdqe lea rdx, [0+rax*4] mov eax, 16 sub rax, 1 add rax, rdx mov edi, 16 mov edx, 0 div rdi imul rax, rax, 16 sub rsp, rax mov rax, rsp add rax, 3 shr rax, 2 sal rax, 2 mov QWORD PTR [rbp-24], rax mov rsp, rcx mov eax, 0 leave ret
I am seeing a whole lot of assembly instructions if I declare a variable sized array. Can some one explain how is this flexibility of variable size achieved?