我试图查看 MSVC 如何分配其 32 字节的影子空间,但似乎它只分配 8 字节的影子空间。
// Test.c
int main() {int var1 = 1;}
Run Code Online (Sandbox Code Playgroud)
上面的程序生成以下 .asm 文件:
var1$ = 0
main PROC
; Test.c
sub rsp, 24 ; allocates 24 bytes
mov DWORD PTR var1$[rsp], 1
xor eax, eax
add rsp, 24
ret 0
main ENDP
Run Code Online (Sandbox Code Playgroud)
它只分配24个字节。当我声明 4 个变量时,它会分配相同的数量,并且由于每个变量都是 4 个字节,因此必然意味着 24 个字节中的 16 个字节用于声明的变量,留下 8 个字节用于影子空间。
仅当声明 5 个变量时,它才会分配 40 字节的影子空间。为什么它只分配8字节的影子空间?
我使用命令编译了程序CL Test.c /Fa