最近在阅读Linux内核源代码的时候,发现有很多__attribute__其中有一个宏FASTCALL(x)或者fastcall用的就比较多,定义如下:
#define FASTCALL(x)x __attribute__((regparm(3)))
#define fastcall __attribute__((regparm(3)))
意思是,最多可以使用3个寄存器(或许是eax,edx,ecx)来传送前3个参数,其他参数则压入栈中,而一般来说,函数的调用是基于栈的。
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
意思就是使用0个寄存器来进行参数传递,顾名思义它是想使得调用这个函数时的所有参数都压入栈中,相对于FASTCALL的使用方式当然是要慢一些了
阅读(1116) | 评论(0) | 转发(0) |