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

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

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

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

目录
相关文章
|
6月前
|
缓存 Linux Go
如何初步使用valgrind工具来检测内存泄露,堆栈空间,未初始化变量问题
如何初步使用valgrind工具来检测内存泄露,堆栈空间,未初始化变量问题
|
7月前
|
存储 算法 C语言
5.堆栈算法
5.堆栈算法
|
9月前
|
存储 算法 程序员
内存管理(二)——连续分配管理方式
内存管理(二)——连续分配管理方式
240 0
|
9月前
|
存储 算法 索引
内存管理(三)——非连续分配管理方式(分页)
内存管理(三)——非连续分配管理方式(分页)
372 0
|
10月前
|
存储 Java
堆栈的区别是什么
堆和栈是计算机内存中两种不同的数据结构,它们用来存储程序运行时所需的数据。虽然堆和栈都是用于存储数据的,但它们在内存管理和数据访问方面有着明显的区别。下面我将详细解释堆和栈的区别。
174 0
|
机器学习/深度学习 存储 人工智能
2021 年要寻找的 6 种现代数据堆栈趋势
2021 年要寻找的 6 种现代数据堆栈趋势
56 0
|
存储 运维 安全
基于VS调试分析 + 堆栈观察问题代码段
面对眼前两段有问题的代码,你会通过什么去解决这个问题?本文将通过调试进行逐步分析💻,带你步步观察程序的运行逻辑
21362 0
基于VS调试分析 + 堆栈观察问题代码段
|
存储
【计算机系统结构】堆栈、累加、通用寄存器型机器对比
【计算机系统结构】堆栈、累加、通用寄存器型机器对比
402 0
段错误(核心已转储)问题的分析方法(未成功)
段错误(核心已转储)问题的分析方法(未成功)
184 0
|
存储 缓存 算法
【JVM深度解析】对象的分配策略栈上分配与TLAB
JVM是如何自动进行内存管理的呢?本文详细对象的分配策略,栈上分配与TLAB,相信相信大家看完已经掌握JVM是如何管理,本文适合点赞+收藏。
【JVM深度解析】对象的分配策略栈上分配与TLAB