尝试创建自己的stdarg.h宏变量参数函数的替代方案时,也就是具有未知数量参数的函数,我尝试理解参数在内存中的存储方式。以下是一个最小化可执行代码示例:
#include <stdio.h>
void foo(int num, int bar1, int bar2)
{
printf("%p %p %p %p\n", &foo, &num, &bar1, &bar2);
}
int main ()
{
int i, j;
i = 3;
j = -5;
foo(2, i, j);
return 0;
}
我很清楚地理解函数的地址和参数的地址不在同一位置。但是后者并不总是以相同的方式组织。
在x86_32架构(mingw32)上,我得到了这样的结果:
004013B0 0028FEF0 0028FEF4 0028FEF8
这意味着地址的顺序与参数的顺序相同。
但是当我在x86_64上运行它时,输出结果如下:
0x400536 0x7fff53b5f03c 0x7fff53b5f038 0x7fff53b5f034
地址与参数的顺序明显相反。
因此我的问题是 (简短概括) :
这些参数的地址是否取决于架构,还是编译器也会影响?