应用中堆栈分配初识(自己理解,不一定准确)

简介:         一个应用程序共享一个堆,却有很多栈,也可以说是一个线程共享一个栈。堆空间是程序员分配的,栈空间是系统分配的。那么在程序启动的开始是如何确定堆和栈的呢?我想可能是这样的:应用程序启动的时候,进入第一个类中的时候,堆空间已经开辟,栈的个数是根据目前有多少线程决定的。

        一个应用程序共享一个堆,却有很多栈,也可以说是一个线程共享一个栈。堆空间是程序员分配的,栈空间是系统分配的。那么在程序启动的开始是如何确定堆和栈的呢?我想可能是这样的:应用程序启动的时候,进入第一个类中的时候,堆空间已经开辟,栈的个数是根据目前有多少线程决定的。程序顺序执行,该放在堆空间的就放在堆空间,该放在各自栈空间的放在各自的栈空间。函数,全局变量,局部变量,静态值等都根据自己生命周期进行释放。堆和栈都在根据程序的运行动态改变着。直到程序结束,堆和栈都被释放。

      说一个不太恰当的比喻,整个过程就像是分配快递,堆呢就是一块很大的空间,整个空间中存放的都是未署名(相当于大小不定)的快递。栈呢就是各个省份的快递堆。程序运行的堆栈分配就相当于分拣员分配快递,是谁的放在谁的那一堆。有的快递被运走了,那一块空间就被释放了。

目录
相关文章
|
5月前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
66 2
|
6月前
|
存储 算法 Java
JVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】
JVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】
56 0
|
缓存 Linux Go
如何初步使用valgrind工具来检测内存泄露,堆栈空间,未初始化变量问题
如何初步使用valgrind工具来检测内存泄露,堆栈空间,未初始化变量问题
171 0
|
存储 算法 C语言
5.堆栈算法
5.堆栈算法
|
存储 算法 程序员
内存管理(二)——连续分配管理方式
内存管理(二)——连续分配管理方式
409 0
|
存储 运维 安全
基于VS调试分析 + 堆栈观察问题代码段
面对眼前两段有问题的代码,你会通过什么去解决这个问题?本文将通过调试进行逐步分析💻,带你步步观察程序的运行逻辑
21388 0
基于VS调试分析 + 堆栈观察问题代码段
|
存储
【计算机系统结构】堆栈、累加、通用寄存器型机器对比
【计算机系统结构】堆栈、累加、通用寄存器型机器对比
517 0
|
存储 缓存 算法
【JVM深度解析】对象的分配策略栈上分配与TLAB
JVM是如何自动进行内存管理的呢?本文详细对象的分配策略,栈上分配与TLAB,相信相信大家看完已经掌握JVM是如何管理,本文适合点赞+收藏。
【JVM深度解析】对象的分配策略栈上分配与TLAB