C语言32/64位参数地址,压栈问题

img

在学C语言的 可变参数(三个点,csdn没法打) 的时候想到:
如果不特定限制调用约定的话,我记得是参数从右往左选择压栈,然后栈中从高往低压,那么参数y应该在高地址,x应该在低地址。

  1. 问题:为什么x,y都是int类型,他们的地址相差8 ? 不应该是4吗?(32位中是符合预期的)。

  2. 我在windows 环境下用了 msvc 编译器(编译结果是第一张图),gcc编译结果(第二张图),ubuntu 22.04 编译结果(第三张图)。
    发现在linux 中,即使是64 位,也只是相差4 ,并且和win不同的是,参数似乎是从左向右压栈的?

img

img

我寻思C语言提供的那个 va_list 来处理可变参数的宏不就是从参数压栈方面帮我获得参数的吗

1.在64位系统中,int占8字节呀,地址也是需要64位来寻址
2.其实跟你系统是多少位没有直接的关系,要看你的IDE是32位还是64位
比如vs本身是64位的,但是你编译的时候可以选编译成的exe是32位还是64位
但是依然有间接关系,32位系统下无法运行64位的程序
3.不同IDE实现不一样,栈有正序的有倒序的