C++技术问题总结-第13篇 调用约定有哪些,有什么不同

调用约定(Calling convention),决定以下内容:

a. 函数参数的压栈顺序。

b. 由调用者还是被调用者把参数弹出栈。

c. 以及产生函数修饰名的方法。

常用的调用约定为__stdcall、__cdecl、__fastcall。

1) __stdcall。

StandardCall的缩写,约定内容:

a. 参数从右向左压入堆栈。

b. 函数被调用者修改堆栈。

c. 输出函数名前加上一个下划线前缀,后面加上一个"@"符号和其参数的字节数,格式为[email protected],例如 :function(int a, int b),其修饰名为:[email protected]

通常用于Win32 Api中,主要见于Microsoft Visual C、C++。

对应宏定义:#define WINAPI __stdcall

2) __cdecl。

C Declaration的缩写,约定内容:

a. 参数从右到左入栈。

b. 调用者清除栈,俗称手动清栈。

c. 输出函数名前加上一个下划线前缀,格式为_functionname。

__cdecl为C/C++语言默认的函数调用方法。

3) __fastcall。

为了提高调用速度,将前两个(或若干个)参数由寄存器传递,其余参数还是通过堆栈传递。

快速调用,约定内容:

a. 参数从右向左压入堆栈。

b. 函数被调用者修改堆栈。

c. 输出函数名前加上一个"@"符号,后面也是一个"@"符号和其参数的字节数,格式为@[email protected]。

不同编译器编译的程序规定的寄存器不同。在Intel x86平台上,使用ECX和EDX寄存器。使用__fastcall方式无法用作跨编译器的接口。

时间: 2024-10-02 19:55:17

C++技术问题总结-第13篇 调用约定有哪些,有什么不同的相关文章

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste

第13篇-JAVA 网络编程

第13篇-JAVA 网络编程 每篇一句 比我强大的人都在努力我还有什么理由不拼命 初学心得 不去追逐你所渴求你将永远不会拥有 (笔者JEEP/711)[JAVA笔记 | 时间:2017-04-22| JAVA 网络编程 ] 1.网络编程基本概念 1.什么是计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路连接起来在网络操作系统网络管理软件及网络通讯协议的管理和协调下实现资源共享和信息传递的计算机系统 把分布在不同地理区域的计算机与专门的外部设备用通讯线路互

嵌入式系统 Boot Loader 技术内幕----仅此一篇读懂bootloader

嵌入式系统 Boot Loader 技术内幕----仅此一篇读懂bootloader 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念.软件设计的主要任务以及结构框架等内容. 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分. 2. Li

Java图像处理最快技术:ImageJ 学习第一篇

ImageJ是世界上最快的纯Java的图像处理程序.它可以过滤一个2048x2048的图像在0.1秒内(*).这是每秒40万像素!ImageJ的扩展通过使用内置的文本编辑器和Java编译器的ImageJ的开发插件.500多插件可用. 数据类型:8位灰度或索引色,16位无符号整数,32位浮点和RGB色彩. 文件格式:读写所有支持的数据类型为TIFF(非压缩)或原始数据.打开和保存GIF,JPEG,BMP,PNG,PGM,FITS和ASCII.打开DICOM.使用URL打开的TIFF.GIF文件.J

C++技术问题总结-第0篇

从今天开始,对C++常用技术做个总结. 参考书籍:<C++Primer>.<C++对象模型>.<设计模式>.<Windows核心编程>.<STL解密>. 1. static_cast等四个cast的具体意义 C++类型转换:隐式转换和显式转换. 显式转换:static_cast.dynamic_cast.reinterpret_cast.const_cast. 1.1. static_cast 用法:static_cast<type-id&

【技术】photoshop版本:13.0切图

1. 点击“移动工具”: 2. 用“移动工具”点击原图需要的单个图层:(多个图层:按shift+“移动工具”选取多个图层,右键选择“转化为智能对象”) 3. 按ctrl+A: 4. 按ctrl+C: 5. 按ctrl+N,背景设为“透明”,点击“确定”: 6. 点击新建的空白页,按ctrl+V: 7. 按ctrl+shift+alt+S,可以将最大的背景图片设为“JPEG”,品质可以设为“60”-“75”,点击“存储”,小图片设为“PNG-24”,点击“存储”: 8. 文件名为“.jpg”,格式

[转]有哪些值得关注的技术博客(Java篇)

有哪些值得关注的技术博客(Java篇) 大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1.总结知识点相对比较全面 2.一般来说讲解知识点通俗易懂 3.路线比较清晰,不会有太多的冗余内容. 这样一来,对于自学的朋友来说,一些专业的博客不但大量的缩减了你得学习时间.提高了学习效率.更重要的是这些博客能培养你对编程的兴趣. 于是,这几期文章会主要推荐一些技术博客,目前计划打算主要分为: (已完) 

[原创] 软件自动化测试技术(1) - 准备篇

软件自动化测试技术(1) - 准备篇 想清楚 1. 为什么要做自动化测试? 有前途? 有钱途? 大家都在做? 有危机感? 过去做的很没意思,想换换? 2. 我的兴趣点在哪里? 对当前工作没有任何兴趣? 对点鼠标感兴趣? 对测试手工感兴趣? 对写代码感兴趣? 对各种新的技术感兴趣? 3. 我适合做自动化吗? 我不懂技术? 我对学习工具感到恐惧? 我觉得手工的系统/验收测试能发现更多的缺陷,而这正是我的成就感所在? 4. 做了自动化我能怎么样? 有钱了? 高大上了? 可以跳槽去Google.Face

C++技术问题总结-第2篇 进程通信

进程通信的方法 进程通信基本方法有如下几种. 1.消息传递机制. 2.共享内存. 3.管道和邮槽. 4.剪贴板. 5.Socket通信. 1.消息传递机制 使用WM_COPYDATA实现进程间的传递数据. 函数原型 LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam) 参数 hWnd:其窗口程序将接收消息的窗口的句柄.如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非