小编Chr*_*sen的帖子

为什么 MSVC 不在生成的汇编代码中分配 32 字节影子空间?

我试图查看 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

c assembly x86-64 masm visual-c++

1
推荐指数
1
解决办法
444
查看次数

标签 统计

assembly ×1

c ×1

masm ×1

visual-c++ ×1

x86-64 ×1