Stack 与 Heap 的区别

堆和栈最明显的区别是:

堆(Heap):队列优先,先进先出(FIFO—first in first out);

栈(Stack):先进后出(FILO—First-In/Last-Out);

如果有人把堆栈合起来说,那他很可能说的是栈!

其次,他们还有如下区别:

栈(Stack):

栈(Stack)是暂存空间(scratch space),主要用于内部计算。当函数被调用时,栈(Stack)队列上有一块区域会被分配出来用作存储局部变量和数据。当函数返回时,这块区域会被释放!由于栈(Stack)是FILO队列,所以,最近被使用的区域会最先被释放,最后被使用的区域被后释放!栈(Stack)的使用不需要我们操心!

堆(Heap):

实例变量和对象位于堆中。请记住,这是维护状态的地方,当发生内存泄漏时,分析器将在这里帮助您找到内存分配。局部变量和方法位于堆栈中。因此,如果我们有一个调用go()方法的main方法,而go()方法又调用gone()方法,那么从上到下的堆栈将由

gone()

go()

main()

一旦处理完gone(),它将被从堆栈中删除。在gone()中使用的任何相应的局部变量也将从堆栈中删除。堆栈将引用堆上的对象。

Stack 与 Heap 的区别

堆(Heap)是动态分配的,你可以在任意时间*分配!使用起来肯定比栈(Stack)复杂,但是也给了我们灵活性!

操作系统在线程建立时会自动为系统级线程分配Stack,而Heap的分配是由程序运行时调用系统完成的!Stack的速度比Heap要快的多!