FAST_FUNC在busybox中做了什么?

时间:2014-12-04 04:56:06

标签: c busybox

我在阅读一些代码时发现了这一点:

char* FAST_FUNC bb_simplify_path(const char *path)

此处char*是一种返回类型,但我不了解FAST_FUNC的作用。此FAST_FUNC用于许多地方。

一般来说FAST_FUNC在busybox中做了什么?

1 个答案:

答案 0 :(得分:2)

来自include/platform.h

/* FAST_FUNC is a qualifier which (possibly) makes function call faster
 * and/or smaller by using modified ABI. It is usually only needed
 * on non-static, busybox internal functions. Recent versions of gcc
 * optimize statics automatically. FAST_FUNC on static is required
 * only if you need to match a function pointer's type */
#if __GNUC_PREREQ(3,0) && defined(i386) /* || defined(__x86_64__)? */
/* stdcall makes callee to pop arguments from stack, not caller */
# define FAST_FUNC __attribute__((regparm(3),stdcall))
/* #elif ... - add your favorite arch today! */
#else
# define FAST_FUNC
#endif

基本上,它激活了一个与架构相关的函数注释,可以加速函数调用。实际的注释取决于平台(因此是#if),但是在x86 / x86_64(这里目前实现的唯一平台)上,它会激活" stdcall"在带注释的函数上调用约定。 stdcall使一些函数的参数能够在寄存器而不是堆栈中传递,从而消除了函数调用调用序列的一些内存访问。