__stdcall与变参函数的栈清理

六道佩恩 六道佩恩 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我主要有两个问题:
1. 关于变参函数,是不是不管声明何种调用约定,其都会实现为__cdecl?下面是VC的汇编,实际指定的是__stdcall。


2. gcc的对栈清理的方式怎么和VC不一样啊?或者说这算栈清理吗?


观察了它几次调用,发现它每次传参都是拿同一段空间反复使用,就是图中入栈的那段,对不同函数的调用,传参都是用的这同一段,作为调用方把控了传参的栈空间,是不是也相当于做了栈清理?或者说这能算栈清理吗?

(编译用的32位,非x64约定)
...全文

相关推荐

函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)

函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal) 关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解。 microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。堆栈由谁清除这个很重要,如果是要写汇编函数给C调用,一定要小心堆栈的清除工作,如果是__cdecl方式的函数,则函数本身(如果不用汇编写)则不需要关心保存参数的堆栈的清除,但是如果是__stdcall的规则,一定要在函数退出(ret)前恢复堆栈。

zeroZhou0

关于函数调用方式__stdcall和__cdecl详解

下面小编就为大家带来一篇关于函数调用方式__stdcall和__cdecl详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38739164

__stdcall 和 __cdecl 的区别浅析

__stdcall 和 __cdecl 的区别浅析,需要的朋友可以参考一下

weixin_38691739

stdcall介绍

stdcall的用法详解,常见的调用约定有:stdcall,cdecl,fastcall,thiscall,naked call

xiaodan4334

__stdcall调用约定、C调用约定和__fastcall调用约定

__stdcall调用约定、C调用约定和__fastcall调用约定 __stdcall调用约定、C调用约定和__fastcall调用约定 __stdcall调用约定、C调用约定和__fastcall调用约定 __stdcall调用约定、C调用约定和__fastcall调用约定

BT六眼飞鱼
评论 7
收藏 已收藏
分享
返回顶部
六道佩恩
C语言 70,039 成员 243,237 内容