« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9690863 建立时间:2004年12月20日 |

| |
[c++]__stdcall比__cdecl有什么优点 原创空间, 软件技术
邢红瑞 发表于 2005/12/18 16:59:08 |
Windows中可以指定的调用约定有三种:__fastcall, __stdcall, __cdecl。 其区别可以从汇编代码中中看出。 1.__stdcall和__cdecl都是从右到左处理参数. 2.__fastcall的两个参数用ECX和EDX传递,其他的参数通过栈传递,其实也是从右到左入栈,寄存器要比栈快。 3.__cdecl需要在调用返回后由caller恢复栈指针,_fastcall和__stdcall由callee来恢复栈指针。 类成员函数通常用ECX传递this指针,所以类成员函数是不能使用__fastcall调用约定的。 而可变参数的函数只能用__cdecl调用约定,因为可变参数时,callee去恢复栈指针不大可能。 另外三种调用约定生成的函数名也有所区别。 __stdcall是为了兼容windows,__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定, 在Windows中, WINAPI就是 |
|
|