程序中的栈和数据结构中的栈区别与联系
来源:互联网 发布:mysql连接期限 编辑:程序博客网 时间:2024/05/22 11:47
程序中的栈和数据结构中的栈区别与联系
1,程序中的“函数调用栈”是栈数据结构的一种应用。
2,函数调用栈一般是从高地址向低地址增长的。
a,栈底为内存的高地址处
b,栈顶为内存的低地址处
3,函数调用栈中存储的数据为活动记录。
4,什么是活动记录?
活动记录是函数调用时一系列相关信息的记录。如下:
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,程序栈空间仍然遵从后进先出的规则
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
- 程序中的栈和数据结构中的栈区别与联系
- 数据结构中的堆和栈与内存中的堆和栈的区别
- 数据结构中的栈与汇编语言中的栈的区别
- Java中的抽象类和接口的区别与联系
- Java中的抽象类和接口的区别与联系
- iOS 开发中的ARC和MRC的区别与联系
- iOS 开发中的ARC和MRC的区别与联系
- java中的session和cookies区别与联系
- 理解spring中的BeanFactory和FactoryBean的区别与联系
- JavaScript中的splice方法和slice方法联系与区别
- C 与数据结构中的堆与栈的区别
- 进程与程序的区别和联系
- jQuery中的$(document).ready和javascript中的window.onload的联系与区别
- 堆和栈的联系与区别
- 堆和栈的区别与联系
- C++及数据结构中的堆和栈的区别
- 数据结构的逻辑结构和物理结构区别与联系
- erlang中的元组与列表的区别与联系
- 嵌入式系统之Y-Chart
- java集合初探之数据
- Chrome浏览器使用Ajax访问本地资源出错
- 手机号码、邮箱验证的正则表达式
- 代理相关记事
- 程序中的栈和数据结构中的栈区别与联系
- OC-类的复合
- Python标准库:内置函数getattr(object, name[, default])
- 很早以前在百度空间写的博客,感兴趣的可以看下,就不搬过来了
- Jxl Excel导入
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha
- SQL游标使用及实例
- OC中的Block属性
- 红黑树