堆和栈(Heap and Stack)的区别!

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

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

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

栈(Stack):

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

堆(Heap):

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

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

Image source:  vikashazrati.wordpress.com