I'll address normal practice, not theory--
It depends upon where you put the
int arr[10];
If you put put within a function, that will result in something like:
SUB #40, SP
Subtracting 40 (assuming 4 byte integer) from the Stack Pointer register.
&arr then == SP
That assumes arr is the only variable allocation. Normally, all allocations are done in one step. The resulting variables are then offsets from the stack pointer.
If put the definition outside a function, the compiler and linker will create a program section for demand zero memory pages. When the program runs, the loader sets up the page and the first reference triggers a page fault that the OS will respond to by creating a zeroed out memory page.