在学C语言的 可变参数(三个点,csdn没法打) 的时候想到:
如果不特定限制调用约定的话,我记得是参数从右往左选择压栈,然后栈中从高往低压,那么参数y应该在高地址,x应该在低地址。
问题:为什么x,y都是int类型,他们的地址相差8 ? 不应该是4吗?(32位中是符合预期的)。
我在windows 环境下用了 msvc 编译器(编译结果是第一张图),gcc编译结果(第二张图),ubuntu 22.04 编译结果(第三张图)。
发现在linux 中,即使是64 位,也只是相差4 ,并且和win不同的是,参数似乎是从左向右压栈的?
我寻思C语言提供的那个 va_list 来处理可变参数的宏不就是从参数压栈方面帮我获得参数的吗