x86_64基本使用寄存器存储函数参数,寄存器不够才入栈;
而i386将所有参数保存在栈上,通过gcc的扩展功能__attribute__((regparm()))即可实现部分参数的寄存器传递。
调试语法:
--《深入理解计算机系统(原书第2版)》
代码
#include <stdio.h>
#include <stdlib.h>
int v1 = 1;
float v2 = 0.01;
#ifdef FAST
__attribute__((regparm(3)))
#endif
void func(int a, long b, short c, char d, long long e,
float f, double g, int *h, float *i, char*j)
{
printf("a: %d, b: %ld, c: %d, d: %c, e: %lld\n"
"f: %.3e, g: %.3e\nh: %p, i: %p, j: %p\n",
a, b, c, d, e, f, g, h, i, j);
}
int main(void)
{
func(100, 35000L, 5, 'A', 123456789LL, 3.14, 2.99792458e8,
&v1, &v2, "strin