首页
社区
课程
招聘
[求助]fastcall为什么效率高
发表于: 2017-8-31 11:18 3238

[求助]fastcall为什么效率高

2017-8-31 11:18
3238
fastcall调用约定的前面几个参数是通过寄存器传递,这样就比栈传递的效率高,所以X64就用的fastcall调用约定。求助各位为什么寄存器传参的效率要比栈传参的效率高呢?寄存器传用mov指令,后者用push指令,不都是一条指令么?是因为寄存器在CPU中,栈在内存中吗?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1787
活跃值: (345)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
寄存器写入速度比内存高太多。
2017-8-31 11:29
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是因为寄存器在CPU中,栈在内存中
2017-8-31 11:30
0
雪    币: 273
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
三楼正解
2017-8-31 12:19
0
雪    币: 253
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很明显的道理,一个东西放在家里(寄存器),一个东西放在房子外面(栈),当你需要在家需要使用这个东西的时候,你会觉得哪里去拿(R)和放(  W  )  会更快一些呢?因为寄存器的数量是有限的,所以在x86中为  _fastCall  调用约定只提供了ecx,edx  2个寄存器传参,其余参数通过栈去读取,3种调用约定性能一般情况下排序        _fastcall  >    cdecal  >  _stdcall   
2017-8-31 13:23
0
雪    币: 300
活跃值: (770)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
明白了,谢谢大家
2017-8-31 13:42
0
雪    币: 8707
活跃值: (3275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
说的都通俗易懂,主要看指令执行时间
2017-9-2 12:05
0
游客
登录 | 注册 方可回帖
返回