我在读代码时发现了这个:
char* FAST_FUNC bb_simplify_path(const char *path)
这里
char*
是一种返回类型,但我不理解FAST_FUNC
的作用。这个FAST_FUNC
在许多地方使用。一般来说,
FAST_FUNC
在busybox中做什么? 最佳答案
从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
允许将函数的一些参数传递到寄存器而不是堆栈中,这样就消除了函数调用序列中的一些内存访问。