作者:知乎用户
链接:https://www.zhihu.com/question/31453641/answer/52001143
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

回答1:
你是想问为啥Windows C++中全是stdcall或WINAPI,而不是cdecl的calling convention吧?原因简单直接,生成执行码小。WINAPI就是stdcall的一个宏定义,其实是一回事。stdcall约定是被调用者清栈,返回时指令带一个退栈参数就可以了,被调用者自己一句ret n就完事了。cdecl约定是调用者清栈,就是每一个调用者在函数调用完成后,要每一个调用者自己去拉esp把栈状况改回来。stdcall的缺点就是无法支持可变数量的参数,因为被调用者必须确定参数数量才能自己清栈。我印象中老Win32 API只有一个API支持变长参数,所以只有她是cdel而不是stdcall,来自user32的wsprintf。
发布于 2015-06-2046​12

回答2:
省点内存呗,栈顶指针弹回这个指令,只需要函数实现一下,而不需要每一次调用结束都去实现一下。当年从dos640k时代走出来的那堆微软程序员,对于节省内存有各种变态手段。启动阶段想方设法不加载com组件,实在扛不住了就做一个超级精简版com。更不用说MFC里面的各种变态省内存方法了。
发布于 2015-06-29

综上所述:
__stdcall 被调用者清理堆栈,生成执行代码小,节省内存。 缺点: 不支持可变参数。 windows api使用__stdcall是历史问题。

最新文章

  1. js限制输入框只能输入数字
  2. git 较基础命令
  3. Cannot install NodeJs: /usr/bin/env: node: No such file or directory
  4. MySQL-->基础-->001-->MySQL基本操作
  5. 按月将Windows日志导出至CSV文件
  6. linq to xml 基本操作
  7. HDOJ_1010 Tempter of the Bone
  8. 关于本人遇到的nodejs的一些错误信息
  9. Brackets - 又一款牛x的WEB开发编辑器
  10. 对WPF中MeasureOverride 和ArrangeOverride 浅理解
  11. JAVA抽象类与接口
  12. HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher
  13. 封装兼容性添加、删除事件的函数 addEventListener与removeEventListener
  14. ExtJS4.2学习(11)——高级组件之Grid
  15. PHP 数组和对象的相互转化
  16. java jstack dump 线程 介绍 解释
  17. twemproxy代理主干流程——剖析twemproxy代码正编
  18. LAMP动静分离安装(源码安装)
  19. SignalR 2.x入门(二):SignalR在MVC5中的使用
  20. js原生事件

热门文章

  1. WEB漏洞挖掘技术总结
  2. 为什么Domain controller上的time synchronization非常重要?
  3. jQuery过滤选择器:not()方法介绍
  4. XMPP键盘订制实现图文混排
  5. java实现ssl单/双向认证通信[推荐]
  6. Libsvm和Liblinear的使用经验谈
  7. volist 自增序号 分页如何实现?
  8. Python 遍历set
  9. CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别
  10. 如何判断自己家的宽带是否有公网IP