程序中的栈和数据结构中的栈区别与联系

来源:互联网 发布:mysql连接期限 编辑:程序博客网 时间:2024/05/22 11:47
                                                                                                              程序中的栈和数据结构中的栈区别与联系


1,程序中的“函数调用栈”是栈数据结构的一种应用。


2,函数调用栈一般是从高地址向低地址增长的。
        a,栈底为内存的高地址处
        b,栈顶为内存的低地址处


3,函数调用栈中存储的数据为活动记录。


4,什么是活动记录?
      活动记录是函数调用时一系列相关信息的记录。如下:


5,函数调用的过程如下:


           


6,程序中的栈空间可看做一个顺序栈的应用。


7,栈保存了一函数调用所需的维护信息。
     a,函数参数,函数返回地址
     b,局部变量
     c,函数调用上下文


8,什么是程序的栈溢出?
     a,在不断的压栈过程中造成栈空间耗尽而产生栈溢出。
     b,栈溢出常由于函数递归过深或局部数组过大造成。
   
       看下面的程序:
           #include <stdio.h>
           void reverse(char* s)
           {
       if((s != NULL) && (*s != '\0'))
        {
               reverse(s+1);
               printf("%c",*s);
         }
            }


            int main()
            {
                  reverse("12345");
                  printf("\n");
                  return 0;

             }

     运行结果为:

                  

     通过这个程序分析递归调用中栈的变化。
       

小结:
    1,程序栈空间本质上是一种顺序栈
    2,程序栈空间的访问是通过函数调用进行的
    3,程序栈空间仍然遵从后进先出的规则
0 0