内存中的堆栈和数据结构堆栈区别
堆栈的认识
- 1.内存中的堆栈
- 代码区
- 静态数据区
- 栈区
- 堆区
- 2.数据结构中的堆栈
内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。
1.内存中的堆栈
内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据,动态数据区又分为栈区和堆区。
代码区
存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。
静态数据区
存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。
栈区
存储运行方法的形参、局部变量、返回值。由系统自动分配和回收。
例如:int method(int a) {int b;}
栈中存储参数a、局部变量b、返回值temp。
int main()
{int b; //栈char s[] = "abc"; //栈char *p2; //栈
}
其中函数中定义的局部变量按照先后定义的顺序依次压入栈中,也就是说相邻变量的地址之间不会存在其它变量。栈的内存地址生长方向与堆相反,由高到底,所以后定义的变量地址低于先定义的变量,比如上面代码中变量s的地址小于变量b的地址,p2地址小于s的地址。栈中存储的数据的生命周期随着函数的执行完成而结束。
堆区
new一个对象的引用或地址存储在栈区,指向该对象存储在堆区中的真实数据。由程序员分配和回收(Java中由JVM虚拟机的垃圾回收机制自动回收)。
例如:Class Student{int num; int age;}
main方法中Student stu = new Student();
分配堆区空间中存储的该对象的num、age,变量stu存储在栈中,里面的值是对应堆区空间的引用或地址。
堆的内存地址生长方向与栈相反,由低到高,但需要注意的是,后申请的内存空间并不一定在先申请的内存空间的后面,即p2指向的地址并不一定大于p1所指向的内存地址,原因是先申请的内存空间一旦被释放,后申请的内存空间则会利用先前被释放的内存,从而导致先后分配的内存空间在地址上不存在先后关系。堆中存储的数据的若未释放,则其生命周期等同于程序的生命周期。
关于堆上内存空间的分配过程,首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序。
2.数据结构中的堆栈
栈:是一种连续存储的数据结构,特点是存储的数据先进后出。
堆:是一棵完全二叉树结构,特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。
参考博客: https://blog.csdn.net/K346K346/article/details/80849966
内存中的堆栈和数据结构堆栈区别相关推荐
- C++中各个概念的异同与区别
1.指针与引用的区别 指针有自己的一块空间,而引用只是一个别名 使用sizeof函数,指针大小为4个字节,而引用的大小是被引用对象的大小 指针可以被初始化为NULL,但引用必须是一个对象 作为参数传递 ...
- Java中的堆和栈的区别
当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先 ...
- 数据结构的堆栈与内存中堆栈的区别
随笔 - 20 文章 - 0 评论 - 14 内存堆和栈的区别 原文: http://student.csdn.net/link.php?url=http://www.top-e.org%2Fji ...
- 数据结构堆栈 内存堆栈_零堆栈数据科学家第二部分秋天
数据结构堆栈 内存堆栈 In Hollywood, it is known that the sequels are rarely better than the original movie/par ...
- 数据结构和内存中堆和栈的区别
特别声明:本文参考了博客:http://blog.csdn.net/wolenski/article/details/7951961#comments 堆和栈在 我的眼里一直是很模糊的概念,只是简单的 ...
- C语言堆栈入门——与数据结构堆栈区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念.堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认识 ...
- .Net中堆栈和堆的区别
首先堆栈和堆(托管堆)都在进程的虚拟内存中.(在32位处理器上每个进程的虚拟内存为4GB) 堆栈stack 1.堆栈中存储值类型 2.堆栈实际上是向下填充,即由高内存地址指向低内存地址填充 3.堆栈的 ...
- 数据结构堆栈 内存堆栈_了解堆栈数据结构
数据结构堆栈 内存堆栈 In this article, we'll be understanding the working and the need for the Stack Data Stru ...
- C++ 内存中堆栈讲解
其实我们都知道,计算机内存本来就是一块内存,没有堆栈之分. 堆.栈都是运行程序存放变量和数据的地方. 字符串常量区:存放常量字符串 栈区:存放所有的临时变量和声明 全局常量区:存放定义在函数之外本文件 ...
最新文章
- 吴裕雄--天生自然 PHP开发学习:数组
- mongodb用户管理简单记录
- 百度新闻 谷歌新闻_每日新闻摘要:到目前为止,Google I / O提供的最佳信息
- 中小企业上云多地域办公组网,建立高质量云上内网环境
- java float 高效加减_java Double 进行加减乘除
- SpringBoot精通系列-使用Mybatis Generator生成Dao层代码
- 经济学的概念、术语与常识
- 25.212---复用和信道编码
- toolchain - 工具链
- VISA/MasterCard/AE/DC/JCB卡号结构
- 中级软件设计师刷题笔记
- linux ntfs 3g 格式化,linux使用ntfs-3g操作ntfs格式硬盘
- 对“回调函数”的理解
- 华三防火墙h3cf100配置双宽带_华三F100系列、华为USG6300系列防火墙 策略路由配置实例...
- 如何在游戏中设置游戏的帧率和显示帧率
- 沙漠帕拉萨德别墅室内外Corona建筑作品赏析
- Spring-Boot Dubbo 整合
- TI AWR1642BOOST-ODS EVM开发板入门
- 在jsp引入bootstrap
- 熊市定投,牛市才有收获