引用Stack Based Memory Allocation ,表示为 “......每个线程都有一个保留的内存区域,称为它的堆栈。当一个函数执行时,它可能会将它的一些状态数据添加到堆栈的顶部;当函数退出时,它负责从堆栈”和 “...当函数退出时,堆栈上的内存会自动且非常有效地回收”
第一个引用的句子表示当前线程负责,第二个引用的句子表示其自动完成。
问题一:它是自动完成的还是由当前正在运行的线程完成的?
问题二: Stack 中的内存释放是如何发生的?
最佳答案
问题一 :通过自动(并且非常有效)它们意味着只需移动内存指针(从堆栈中切掉顶部),所有使用的内存都会被回收。不需要复杂的垃圾收集。
问题2 :堆栈只是由开始和结束指针分隔的连续内存块。指针之间的所有内容都属于堆栈,结束指针之外的所有内容都被认为是空闲内存。您通过移动结束指针(堆栈顶部)来分配和释放内存。堆上的事情要复杂得多,内存使用是碎片化的。
关于memory-management - 基于堆栈的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2084548/