C++的函数名修饰,__stdcall,__cdecl,__fastcall___cdecl __stdcall _memcpy_-程序员宅基地

技术标签: c++  windows  开发语言  

在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)有多个用法,而不会打破现有的基于C的链接器。这项技术通常被称为名称改编(Name Mangling)或者名称修饰(Name Decoration)。
__stdcall、__cdecl和__fastcall是C++中的三种函数调用约定,它们主要区别在于函数参数的传递方式和堆栈的清理方式。

__stdcall

在Windows系统的API开发中,__stdcall约定是默认的调用约定,并且是必须使用的。如果没有正确指定__stdcall约定,可能会导致无法正常调用API函数,导致程序运行异常或崩溃。

同时需要注意的是,__stdcall修饰符只能用于全局函数或静态成员函数,不能用于虚函数、内联函数或非静态成员函数等。

下面是一个使用__stdcall修饰符的示例:

int function (int a ,int b)			 //不加修饰就是C调用约定
int __stdcall function(int a,int b,...)//明确指出C调用约定
__stdcall int function(int a,int b,...)

__stdcall还有一个重要的特性,即指定了函数调用约定,用于指定函数在调用时如何从调用者传递参数以及将参数传递给被调用者和返回值。Windows API使用的是__stdcall约定,将参数从右至左推入堆栈中,由调用者恢复函数的堆栈。
__stdcall修饰符是一种用于兼容不同编译器和平台的函数修饰符,可以用于指定函数的参数传递和调用方式,并且应该合理使用函数定义和声明中。

__cdecl

如果需要显式指定一个函数使用__cdecl,调用约定可以使用__cdecl修饰符来声明该函数。例如:

int function (int a ,int b)			 //不加修饰就是C调用约定
int __cdecl function(int a,int b) //明确指出C调用约定
{
    
    return a+b;
}

此时编译器会将该函数编译为使用__cdecl调用约定的函数。需要注意的是,通常情况下不需要使用__cdecl修饰符,除非有特殊的需求。

__fastcall

__fastcall是C++中的一种函数调用约定,用于指定函数参数的传递方式和寄存器的使用方式。它可以使函数调用更加高效。

使用__fastcall需要遵循以下几个步骤:

在函数声明或定义中使用__fastcall关键字指定函数调用约定。
例如:

int __fastcall myFunction(int a, int b,int c, int d);

按照指定的约定方式传递函数参数。__fastcall约定规定前两个整型或指针类型参数使用寄存器传递,其余参数使用堆栈传递。
例如:

int a = 1, b = 2, c = 3, d = 4;
int result = myFunction(a, b, c, d);

在上面的例子中,a和b会使用寄存器传递,c和d会使用堆栈传递。
注意:__fastcall约定只适用于x86架构的CPU,对于其他架构的CPU可能需要使用其他的函数调用约定。
总之,__fastcall可以使函数调用更加高效,但需要注意使用约定方式传递函数参数。

三个函数调用约定的区别

__stdcall:常见的函数调用约定,参数从右往左依次入栈,由被调用函数负责清理堆栈。在使用__stdcall约定时,函数的参数和返回值都会被压入堆栈中,堆栈的使用较大。
__cdecl:默认的函数调用约定,参数从右往左依次入栈,由调用方负责清理堆栈。在使用__cdecl约定时,函数的参数和返回值都会被压入堆栈中,堆栈的使用较大。
__fastcall:快速调用的函数调用约定,规定函数的前两个整型或指针类型参数使用寄存器传递,其余参数使用堆栈传递。在使用__fastcall约定时,函数的参数和返回值都会被压入堆栈中,但是由于使用了寄存器传递参数,因此可以减少堆栈的使用。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40267061/article/details/130054520

智能推荐

小米战略升级为人车家全生态 雷军:小米14对标iPhone 15 Pro-程序员宅基地

文章浏览阅读142次。雷递网 乐天 10月26日小米今日召开了小米澎湃OS暨小米14系列新品发布会。小米CEO雷军宣布了小米集团最新战略:从「手机×AIoT」,升级「人车家全生态」。小米还正式发布了全新操作系统小米澎湃OS、年度旗舰小米14系列和6款AIoT产品。大规模投入底层核心技术雷军说,小米在进入新十年之后,最近这三年,发生了翻天覆地的变化。2023年8月,小米把技术为本列为公司的铁律,同时宣布小米科技战略升级:...

cpython教程_clnmtpy-程序员宅基地

文章浏览阅读5.8k次。http://www.jyguagua.com/?p=2839 http://www.jyguagua.com/?p=2850_clnmtpy

IDEA从controller直接跳到service实现层的快捷键-程序员宅基地

文章浏览阅读7.4k次,点赞11次,收藏6次。controller直接跳到service实现层的快捷键Ctrl+Alt+鼠标左键点击

iOS数字显示保留几位小数点_ios 保留小数点后几位-程序员宅基地

文章浏览阅读6.8k次。防止精度的损失 最好用float 不用double; self.orderCost.text = [NSStringstringWithFormat:@"%.1f元",self.order.cost.floatValue];%.1f 表示小数点一位,%.2f 表示小数点2位,依次类推._ios 保留小数点后几位

Kali Linux-SET社会工程学攻击_kali社会工程学攻击,2024年最新最新网络安全高级面试题汇总-程序员宅基地

文章浏览阅读942次,点赞26次,收藏8次。Swaks 是一款类似于“瑞士军刀”的工具,之所以这么说是因为它在SMTP邮件协议领域有非常非常广泛的应用,同时对于一名信息安全高级工程师来说也是一个不错的利用工具!安全意识较差的用户在收到钓鱼邮件后点击邮件中的钓鱼链接、下载附件中的木马程序,便可能遭受攻击!以上通过 SET + MSF 渗透工具,演示了如何生成木马、获得主机Shell、主机提权、远程桌面控制、日志清除、后门植入等完整的一次渗透测试攻击。命令迁移会话进程到指定的进程pid,达到隐藏控制会话的进程,此时原来的进程是看不到的目的(通过。

随便推点

咨询公司和IT公司的比较_咨询公司和技术公司区别-程序员宅基地

文章浏览阅读1.2k次。1:咨询公司对面试的着装很看重,穿得正式穿得职业得会有好印象,这也许和职业特点有关,咨询经常需要代表公司形象去和其他公司交流。2:咨询公司比我知道的大部分IT公司都要累,果然金融和咨询才是目前最累的行业,怪不得收入那么高。3:咨询对专业的要求更低,但是对经验的要求高于IT公司。4:如果有机会,能去咨询行业锻炼一下也不错,特别是IT咨询。5:咨询公司对学历的要求严于IT公司。6:_咨询公司和技术公司区别

Flex布局详解-程序员宅基地

文章浏览阅读10w+次,点赞447次,收藏2.9k次。Flex 布局详解一、入门1. flex 是什么?flex 是 Flexible Box 的缩写,就是弹性盒子布局的意思2. 为什么我们需要 flex?解决元素居中问题自动弹性伸缩,合适适配不同大小的屏幕,和移动端3.flex 常见术语 三个2序号简记术语1二成员容器和项目(container / item)2二根轴主轴与交叉轴(main-axis / cross-axis)3二根线起始线(main/cross-start)与结束_flex布局

Ubuntu使用日常_使用ubuntu-程序员宅基地

文章浏览阅读6.1k次,点赞2次,收藏2次。Ubuntu使用日常记录使用Ubuntu过程中遇到的问题,总结一些常用工具,归纳一些小技巧。本文永久更新地址:Ubuntu.md文章目录Ubuntu使用日常1、redshift色温调节工具2、无道词典3、pip指向问题4、更换pip源5、GitHub源6、查看Linux本地IP地址7、ubuntu本地开启微型服务器8、ECS与本地主机互传文件9、小书匠和Evernote10、Windows..._使用ubuntu

【第十一届泰迪杯B题产品订单的数据分析与需求预测产品订单的数据分析与需求预测 】第二大问代码分享+解题思路(EDA数据再探索+LightGBM模型)_第十一届“泰迪杯”数据挖掘挑战赛 b题 优秀论文-程序员宅基地

文章浏览阅读1.1w次,点赞21次,收藏232次。- 根据第一问的简单分析,和衍生出了一些特征,例如年月日、价格标签、是否节假日、week等- 读入第一问保存的文件csv,process1.csv,进行数据再探索,发现需要对价格进行更细致的分区间,我采用最优分箱操作,将每个产品的价格归为不同的价位区间,因为相同的产品,它在不同的地区,不同的时间,价格会有波动,所以使用分箱,可以大致归纳价格特征。- 然后再在此基础上,衍生出其他特征,星期几、是否工作日等(因为跟据EDA数据探索和第一问可视化分析,发现周末、还有不是工作日时,需求量会有所上升。)_第十一届“泰迪杯”数据挖掘挑战赛 b题 优秀论文

SSM 整合详细步骤_ssm整合-程序员宅基地

文章浏览阅读2.8k次,点赞8次,收藏31次。SSM 整合第一章环境准备1、创建数据库和表结构create database ssm;create table account(id int primary key auto_increment,name varchar(100),money double(7,2),);2、创建 Maven 工程创建ssm_parent父工程(打包方式选择pom,必须的)创建ssm_web子模块(打包方式是war包)创建ssm_service子模块(打包方式是jar包)创建ssm_dao子模_ssm整合

华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典_华为机试题库及答案python-程序员宅基地

文章浏览阅读2.5w次,点赞48次,收藏303次。华为OD机试题华为OD面试华为OD笔试华为OD算法华为OD编程题华为OD岗位要求华为OD职位评估华为OD考试经验分享华为OD在线测试华为OD评估标准华为OD评测系统华为OD筛选机制华为OD编程语言要求华为OD数据结构与算法华为OD程序设计华为OD程序优化华为OD编程能力考核华为OD编程技巧与经验_华为机试题库及答案python

推荐文章

热门文章

相关标签