栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小
堆可理解为程序的存诸空间,一般用new申请的变量都在堆上,也可理解为全局变量
栈一般是在函数调用时存局部变量和调用函数入口参数时用的,当然函数运行完清栈
可以这样简单的认为:
堆是指程序所能使用的系统内存空间.
栈是系统为程序中的每个线程分配好的一块内存空间.
栈一般用来存储线程运行时的本地的临时数据.
栈也是在堆中分配的.
堆可以存储程序全局的数据.
作为数据结构的概念,堆是一种经过排序的树形数据结构,每个结点都有一个值。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列等。
作为内存的概念,堆是程序员自己申请的空间,比如c里面的
malloc,
c++
的
new
得到的空间,使用后要自己释放;栈一般是程序(编译器)自己分配的空间,用于存放函数的参数、返回地址、局部变量等。