我相信 push/pop 指令会产生更紧凑的代码,甚至可能会运行得稍微快一点。不过,这也需要禁用堆栈帧。
为了检查这一点,我需要手动重写一个足够大的汇编程序(比较它们),或者安装和研究一些其他编译器(看看他们是否有这个选项,并比较结果) .
这是有关此问题和类似问题的论坛主题。
简而言之,我想了解哪个代码更好。像这样的代码:
sub esp, c
mov [esp+8],eax
mov [esp+4],ecx
mov [esp],edx
...
add esp, c
Run Code Online (Sandbox Code Playgroud)
或这样的代码:
push eax
push ecx
push edx
...
add esp, c
Run Code Online (Sandbox Code Playgroud)
什么编译器可以生成第二种代码?他们通常会产生第一个的一些变体。