memory-management - 基于堆栈的内存分配

标签 memory-management garbage-collection stack

引用Stack Based Memory Allocation ,表示为 “......每个线程都有一个保留的内存区域,称为它的堆栈。当一个函数执行时,它可能会将它的一些状态数据添加到堆栈的顶部;当函数退出时,它负责从堆栈” “...当函数退出时,堆栈上的内存会自动且非常有效地回收”

第一个引用的句子表示当前线程负责,第二个引用的句子表示其自动完成。

问题一:它是自动完成的还是由当前正在运行的线程完成的?

问题二: Stack 中的内存释放是如何发生的?

最佳答案

问题一 :通过自动(并且非常有效)它们意味着只需移动内存指针(从堆栈中切掉顶部),所有使用的内存都会被回收。不需要复杂的垃圾收集。

问题2 :堆栈只是由开始和结束指针分隔的连续内存块。指针之间的所有内容都属于堆栈,结束指针之外的所有内容都被认为是空闲内存。您通过移动结束指针(堆栈顶部)来分配和释放内存。堆上的事情要复杂得多,内存使用是碎片化的。

关于memory-management - 基于堆栈的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2084548/

相关文章:

c - 结构内存分配方式

c# - 重复初始化 Clearscript V8 引擎时内存不足(GC 问题?)

java - 设置 XX :MaxMetaspaceSize to the same old XX:MaxPermSize value 后垃圾收集器停止运行

c - 用指针计算后缀表达式?

c - c堆栈数据结构中的推送操作失败

android - 位图内存泄漏 - Android

c - 复杂数据类型的内存分配

ios - View 未完全释放

Python 3.7.4 -> 如何保持低内存使用率?

linux - 堆栈上存储的 nasm 汇编限制