参考Stack Based Memory Allocation,它被声明为“......每个线程都有一个保留的内存区域,称为它的堆栈。当一个函数执行时,它可能会添加一些状态数据到堆栈的顶部;当函数退出时,它负责从堆栈“和”中删除该数据...堆栈中的内存是自动的,非常高效,在函数时回收退出“
第一个引用的句子说当前线程负责,第二个引用的句子说它自动完成。
问题1:是自动完成还是由当前正在运行的线程完成?
问题2:如何在堆栈中重新分配内存?
答案 0 :(得分:2)
问题1 :通过自动(以及非常高效)他们意味着只需移动一个内存指针(切断顶部堆栈),在那里使用的所有内存都被回收。不需要复杂的垃圾收集。
问题2 :堆栈只是一个由开始和结束指针分隔的连续内存块。指针之间的所有内容都属于堆栈,超出结束指针的所有内容都被视为空闲内存。您可以通过移动结束指针(堆栈顶部)来分配和释放内存。堆上的事情要复杂得多,因为内存使用是碎片化的。
答案 1 :(得分:1)
通过查看Call Stack的示例(例如在许多计算机上的C中),您可能会了解更多。
答案 2 :(得分:0)
问题1:是的。
问题2:通过减少堆栈指针,即分配的反向操作。
答案 3 :(得分:0)
堆栈由编译器管理。
堆由库管理。
答案 4 :(得分:-1)