首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 数据库 第二书店 程序员

liqinghua1653/ 


共11个网摘 [ 1 ]   |  访问liqinghua1653的个人空间

Calling Convention的总结 - 张羿/ATField的专栏 - CSDNBlog

liqinghua1653收录,时间:2007-11-2 21:43:47 | 相关网摘我也收藏

因为经常需要和不同的Calling Convention打交道,前段时间整理了一下它们之间的区别,如下:
清理堆栈参数压栈顺序命名规则 (MSVC )备注
Cdecl调用者 (Caller)从右往左 FuncName因为是调用者清理Stack,因此允许变参 (如printf)
Pascal被调用者 (Callee)从左往右 已不再支持__pascal, __fortran, __syscall
Stdcall被调用者 (Callee)从右往左 _FuncName@N
N表示所有参数大小字节数,如4一般在Windows API和COM中使用,也是.NET和Native代码调用的缺省Calling Convention。
顺便提一下,Windows中API的Calling Convention所使用到的WINAPI宏在PC机上是__stdcall,而在WinCE上则是__cdecl,并非一成不变。
Fastcall (Microsoft)被调用者 (Callee)从右往左 @FuncName@N
N表示参数大小字节数,如4和Stdcall类似,但是会选择两个从左往右数最先可以放在寄存器里面的参数放在ECX和EDX中
Thiscall (Microsoft)被调用者 (Callee)从右往左 编译器会将名字,类名,参数等编码%u523


从union的sizeof问题看cpu的对界

liqinghua1653收录,时间:2007-10-28 9:21:09 | 相关网摘我也收藏

都知道union的大小取决于它所有的成员中,占用空间最大的一个成员的大小。所以对于u来说,大小就是最大的double类型成员a了,所以sizeof(u)=sizeof(double)=8。但是对于u2和u3,最大的空间都是char[13]类型的数组,为什么u3的大小是13,而u2是16呢?关键在于u2中的成员int b。由于int类型成员的存在,使u2的对齐方式变成4,也就是说,u2的大小必须在4的对界上,所以占用的空间变成了16(最接近13的对界)



共11个网摘 [ 1 ] 

liqinghua1653/相关标签



网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
Copyright © 2000-2008, CSDN.NET, All Rights Reserved