Gop*_*opi 5 stack garbage-collection memory-management
参考Stack Based Memory Allocation,它被表述为“......每个线程都有一个保留的内存区域,称为它的堆栈。当一个函数执行时,它可能会将它的一些状态数据添加到堆栈的顶部;当函数退出时,它负责从堆栈中删除该数据”和“……当函数退出时,堆栈上的内存会自动且非常有效地回收”
第一个引用的句子表示当前线程负责,第二个引用的句子表示它自动完成。
问题1:是自动完成还是由当前运行的线程完成?
问题 2:堆栈中的内存释放是如何发生的?
问题 1:自动(并且非常有效)意味着只需移动内存指针(从堆栈顶部切掉),就会回收那里使用的所有内存。不需要复杂的垃圾收集。
问题 2:堆栈只是由起始指针和结束指针分隔的连续内存块。指针之间的所有内容都属于堆栈,结束指针之外的所有内容都被视为空闲内存。您可以通过移动结束指针(堆栈顶部)来分配和释放内存。堆上的情况要复杂得多,内存使用是碎片化的。