基于堆栈的内存分配

时间:2010-01-18 07:46:09

标签: memory-management garbage-collection stack

参考Stack Based Memory Allocation,它被声明为“......每个线程都有一个保留的内存区域,称为它的堆栈。当一个函数执行时,它可能会添加一些状态数据到堆栈的顶部;当函数退出时,它负责从堆栈“”中删除该数据...堆栈中的内存是自动的,非常高效,在函数时回收退出“

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

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

问题2:如何在堆栈中重新分配内存?

5 个答案:

答案 0 :(得分:2)

问题1 :通过自动(以及非常高效)他们意味着只需移动一个内存指针(切断顶部堆栈),在那里使用的所有内存都被回收。不需要复杂的垃圾收集。

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

答案 1 :(得分:1)

通过查看Call Stack的示例(例如在许多计算机上的C中),您可能会了解更多。

答案 2 :(得分:0)

问题1:是的。

问题2:通过减少堆栈指针,即分配的反向操作。

答案 3 :(得分:0)

堆栈由编译器管理。

堆由库管理。

答案 4 :(得分:-1)

回答问题1:是的,它由垃圾收集器自动完成,因为守护进程始终使用jvm运行。它检查所有引用,如果它们没有引用(或无法访问),那么它将从堆中删除它。

回答问题2:由于局部变量和方法调用一旦超出范围就会存储在堆栈中,它们将从堆栈中删除。