黑马程序员-堆与栈
来源:互联网 发布:越狱铃声软件 编辑:程序博客网 时间:2024/06/07 00:02
------- android培训、java培训、期待与您交流! ----------
堆栈在语言开发中,很重要,但我对其一直不是非常理解,于是,仔细百度了一下,现将总结与感想记下,以备自己闲时再翻看一番。
首先,堆是堆,栈是栈,堆栈不是堆与栈,是运行时的栈。
1,堆:堆是存储在硬盘上的,栈:栈存放在内存上。
因为每次读取数据,栈里的数据是直接从内存读的,而堆里的数据,需要从硬盘读取到内存,所以,堆的速度不及栈的快。
2,堆的空间大,栈的小。
从一方面讲,堆是存在硬盘上,栈是在内存上,自然是堆的空间大,栈的空间小。从另一层名讲,堆是向高地址扩展,而栈是向低地址扩展(windows下,话说,我不知道其他系统下是什么情况,百度后再修改),栈的大小是一定的,而堆的大小是有限于计算机的虚拟内存,即硬盘大小,因此,堆的空间比栈要大很多。
3,堆存放的一般是对象,数组等,而栈存放的是变量,值。
c通过malloc申请堆空间,c++,java通过new创建对象,对象存放在堆里,而变量等,则存放在栈中,简单的说,就是对象,数组等占空间大的,存放在堆中,而像int a
= 3,等的值则存放在栈中,
- int a = 0; //全局初始化区
char *p1; //全局未初始化区
main() {
int b; //栈
char s[] = "abc "; //栈
char *p2; //栈
char *p3 = "123456 "; //123456/0在常量区,p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char*)malloc(10);
- p2 = (char*)malloc(20); //分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456 "); //123456/0放在常量区,编译器可能会将它与p3所指向的 "123456 "优化成一个地方。
- } 这一段的代码很好,是位前辈写的,我copy来了,看着都觉得简单明了了很多。
4,堆是程序员操作释放的,而栈是系统回收的。
堆创建是要通过malloc,new等通知系统创建,结束时也要通过free等方法告诉系统释放空间。而栈是,系统自动回收的,如变量,当不在其作用范围的时候,便会被系统释放掉,这样有利于栈的空间管理。
堆栈还有其他一大堆,遇到了补上。
------- android培训、java培训、期待与您交流! ----------
详情请查看:
- 黑马程序员-堆与栈
- 黑马程序员--栈内存与堆内存
- 【黑马程序员】栈内存与堆内存
- 黑马程序员——栈与堆的区别
- 黑马程序员-----------------关于Java栈与堆的思考
- 黑马程序员-栈和堆
- 黑马程序员_java中堆,栈与方法区笔记总结
- 黑马程序员-----浅谈堆、栈和常量池
- 黑马程序员——java小结_003_堆和栈
- 黑马程序员-java中堆和栈的区别
- 黑马程序员-----java基础之数组及堆和栈
- 黑马程序员——java面向对象的概念,Java类、引用变量与堆对象
- 黑马程序员技术博客之堆排序
- 黑马程序员 新解---> java的堆内存和栈内存
- 黑马程序员--02.Java语言基础--03.堆内存和栈内存的区别【个人总结】
- 黑马程序员——如何理解成员变量在堆内,局部变量在栈内?
- 黑马程序员 java 自学日记一Java中堆和栈的区别
- 黑马程序员_关于JAVA中栈和堆,以及由此引发的一些思考
- 【C++学习】map
- 单例模式
- matlab绘图函数plot
- hdu 1711 整理下水题
- BZOJ3190 [JLOI2013]赛车(单调栈+半平面交)
- 黑马程序员-堆与栈
- The Skyline Problem
- RS485通讯协议的应用
- 汇编语言基础4
- [leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- C和C++程序员面试秘籍
- MySQL按照汉字拼音字母排序
- 求一个数据结构C语言 关于关键字统计源代码
- 模板-高精度A+B,A-B