栈/入栈/出栈顺序(c语言)-linux

说明: 

1、栈底为高地址,栈顶为低地址。

2、入栈顺序:从右到左。


解释1:栈在内存中的结构

[注:0x00 到 0x04之间间隔4个地址]

入栈:指针先指向0x10,从高地址向低地址方向填数值,最终指针在0x00位置结束。[栈底 到 栈顶][高地址 到 底地址]

出栈:从0x00位置开始遍历到0x10位置。[栈顶 到 栈底][底地址 到 高地址]


解释2:程序入栈顺序

#include <stdio.h>
int t(int e0, int e1, int e2 )
{
        int a=1;
        int b=2;
        int d0=4,d1=44,d2=444;

        printf("e2:%3d, 0x%x\n", e2, &e2);
        printf("e1:%3d, 0x%x\n", e1, &e1);
        printf("e0:%3d, 0x%x\n", e0, &e0);

        printf(" a:%3d, 0x%x\n", a, &a);
        printf(" b:%3d, 0x%x\n", b, &b);

        printf("d0:%3d, 0x%x\n", d0, &d0);
        printf("d1:%3d, 0x%x\n", d1, &d1);
        printf("d2:%3d, 0x%x\n", d2, &d2);

        int i;
        int * p = &a;
        for(i=0;i<5;i++)
                printf("%3d, 0x%x\n", *(p-i),p-i);
        return 0;
}

int main()
{
        t(5, 55, 555);
        return 0;
}
程序结果:

e2:555, 0xbf8c92c8
e1: 55, 0xbf8c92c4
e0:  5, 0xbf8c92c0

 a:  1, 0xbf8c92ac
 b:  2, 0xbf8c92a8
d0:  4, 0xbf8c92a4
d1: 44, 0xbf8c92a0
d2:444, 0xbf8c929c
  1, 0xbf8c92ac
  2, 0xbf8c92a8
  4, 0xbf8c92a4
 44, 0xbf8c92a0
444, 0xbf8c929c

上面的结果就是程序入栈顺序:遵循从右到左,从上到下入栈。

[注释:e0:0xbf8c92c0 -> a:0xbf8c92ac 之间缺少0xbc 0xb8 0xb4 0xb0,总的16个地址,该地址可能是用于函数建设用 ]



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值