zoukankan      html  css  js  c++  java
  • [置顶] 栈/入栈/出栈顺序(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
    ", e2, &e2);
            printf("e1:%3d, 0x%x
    ", e1, &e1);
            printf("e0:%3d, 0x%x
    ", e0, &e0);
    
            printf(" a:%3d, 0x%x
    ", a, &a);
            printf(" b:%3d, 0x%x
    ", b, &b);
    
            printf("d0:%3d, 0x%x
    ", d0, &d0);
            printf("d1:%3d, 0x%x
    ", d1, &d1);
            printf("d2:%3d, 0x%x
    ", d2, &d2);
    
            int i;
            int * p = &a;
            for(i=0;i<5;i++)
                    printf("%3d, 0x%x
    ", *(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个地址,该地址可能是用于函数建设用 ]



  • 相关阅读:
    Jmeter分布测试
    SQL命令
    Linux执行命令时遇到的些问题
    Linux常用命令总结
    Jenkins与SVN持续集成
    在linux上创建slave节点
    内网域名配置方法
    Java中重写与重载的区别
    MongoDB基本使用
    MongoDB安装
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3429371.html
Copyright © 2011-2022 走看看