`
luckyclouds
  • 浏览: 109075 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

c中的FASTCALL

    博客分类:
  • c
阅读更多
在阅读Linux内核源代码的时候,发现有很多__attribute__其中有一个宏FASTCALL用的就比较多
#define FASTCALL __attribute__((regparm(3)))
意思是,最多可以使用3个寄存器(或许是eax,edx,ecx)来传送前3个参数,其他参数则压入栈中,而一般来说,函数的调用是基于栈的。

#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
意思就是使用0个寄存器来进行参数传递,顾名思义它是想使得调用这个函数时的所有参数都压入栈中,相对于FASTCALL的使用方式当然是要慢一些了
分享到:
评论

相关推荐

    __stdcall调用约定、C调用约定和__fastcall调用约定

    __stdcall调用约定、C调用约定和__fastcall调用约定 __stdcall调用约定、C调用约定和__fastcall调用约定 __stdcall调用约定、C调用约定和__fastcall调用约定 __stdcall调用约定、C调用约定和__fastcall调用约定

    函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)

    函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal) 关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解。 microsoft的vc默认的是...

    gcc-4.6.4:修补 gcc 以支持 m68k 目标上的“fastcall”和“regparm”

    gcc-4.6.4 修补 gcc 以支持 m68k 目标上的“fastcall”和“regparm”。 默认情况下,gcc 为 m68... 当 68881 未启用时,32 位浮点数在寄存器中传递,启用时 fp0-fp2 用于所有浮点类型。 所有内置的 libgcc 函数都使用fa

    C语言程序内存布局

    C语言通过栈来维护函数调用上下文,也就是说C中的函数、函数参数列表、局部变量、函数返回值都保存在栈内存中,在完成函数调用之后栈帧随即销毁,至于具体的压栈顺序和上下文维护工作由谁来完成,则取决于函数的调用...

    反编译DLL文件为.CPP工具

    如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++类的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。  3....

    AheadLib源代码

    如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++类的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。  3....

    剖析C++函数调用约定

    Visual C/C++的编译器提供了几种函数调用约定,了解这些函数调用约定的含义及它们之间的区别可以帮助我们更好地调试程序。...__fastcall 被调用函数 右à 左 @函数名@数字 thiscall(非关键字) 被调用函数 右à 左 /

    aardio帮助文档

    可以罕见的、非常方便的操作静态类型,因此可以直接调用C语言、C++等等静态语言的API接口函数( 不需要像VB那样先声明API ),aardio可以支持非常多的API调用约定,例如 stdcall,cdecl,thiscall,fastcall,regparm...

    rcmp:C++17,具有干净API的多架构跨平台挂钩库

    调用约定支持( cdecl 、 stdcall 、 thiscall 、 fastcall 、 native-x64 ) 建造 使用 CMake(作为子项目) 将存储rcmp到子文件夹并将rcmp链接到您的项目: add_subdirectory (path/to/rcmp) target_link_...

    aardio工具解压版

    可以罕见的、非常方便的操作静态类型,因此可以直接调用C语言、C++等等静态语言的API接口函数( 不需要像VB那样先声明API ),aardio可以支持非常多的API调用约定,例如 stdcall,cdecl,thiscall,fastcall,regparm...

    stdcall介绍

    stdcall的用法详解,常见的调用约定有:stdcall,cdecl,fastcall,thiscall,naked call

    [Linker Error] Unresolved external 问题的解决方法

    BCB里遇到过的问题 [Linker Error] Unresolved external 'mysql_init' referenced from C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR.LXSERVER\桌面\TESTINSERTMYSQL\UNIT1.OBJ 的解决方案

    BCB开发金额大小写转换

    if ((b=="零")&&((d=="零")||(b==b2)||(c=="元")||(c=="万")||(c=="亿"))) b=""; if ((a=="0")&&(c!="元")&&(c!="万")&&(c!="亿"))c=""; if (((c=="元")||(c=="万")||(c=="亿"))&&(d=="零")&&(a=="0")) {dx_str=...

    PaxCompiler_v2.1_27nov08 full source

    Script-defined functions support register (Borland fastcall), cdecl, stdcall, safecall, pascal and msfastcall (Microsoft fastcall) calling conventions. The default calling convention is stdcall. (You ...

    MingW VC 之.a .lib .dll .def 关系

    此外还有其他的调用约定,如_fastcall,把前两个参数通过寄存器传递,调用速度快。 要使用dll,我们可以动态调用它,也可以转换成lib库静态调用。 动态调用就是说,先用LoadLibrary加载到内存中。再用GetProcAddress...

    C/C++函数调用约定的区别

    C/C++函数调用约定的区别 函数参数入栈的方式顺序

    wrap_dll:自动生成用于代码注入的dll包装器

    C ++函数已取消组合,在生成的项目中创建了C函数名称,但将其导出为原始变形的符号。 __stdcall和__fastcall符号未修饰,但作为原始符号导出。 用户有责任确保重写功能具有相同的调用约定。 安装 无需安装,但是您...

    怎样把DBGrid的内容导出到Excel

    void __fastcall TPhoneForm::SelectButtonClick(TObject *Sender) {  AnsiString StrDate, ExName;//存放日期用于sheet  AnsiString Datatem,phone1="拨号";//临时存放数据库的字段值  int i,j;  //查询...

    json65:用6502汇编语言编写的JSON解析器

    但是,它应从C,并使用(特别是fastcall约定)。 JSON65可以在6502系列中的任何处理器上运行。 (它不使用任何65C02指令。) JSON65的汇编语言部分采用由所使用的零个页面位置cc65 ,在某种程度上这是与C调用约定...

Global site tag (gtag.js) - Google Analytics