Register__ 2023-03-13 11:35 采纳率: 89.5%
浏览 35
已结题

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 来处理可变参数的宏不就是从参数压栈方面帮我获得参数的吗

  • 写回答

2条回答 默认 最新

  • 於黾 2023-03-13 11:46
    关注

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

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月20日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 植物重测序snp数据Treemix分析出现问题!
  • ¥15 怎么让当前页面只能有一人在编辑
  • ¥15 UCOSⅢ,3.0.3升级为3.0.4后程序编译成功,但是运行后死在统计任务的地方
  • ¥15 python程序长时间运行卡死,付费求解决方案
  • ¥20 VM打开不了ubuntu虚拟机,如何解决?
  • ¥15 java请求一个返回流式数据的接口,如何将流式数据直接返回前端
  • ¥15 为什么连接不了啊,配置都没问题啊
  • ¥15 c语言做一个简单的计算器,大家来看看
  • ¥15 nuxtjs3+ts 报错,急呀!
  • ¥15 matlab矩阵复数本征值排序