最近学到c++类了,但是一直都搞不懂堆和栈到底指的是什么,有什么用处,求解答!
堆可以在log(n)的时间得到极值,栈不是很好形容,大概就是个从底部进从底部取的数据结构
盏由编译器自动分配内存,盏最大1mb,盏以对象的形式(比如int a;a就是盏的分配内存; 堆由自己来分配内存,堆以指针的形式(比如int *a=new int ,a最大可以创建2的32次方内存)。
盏采用后进先出机制。
每一个程序在运行的时候都要有自己的资源,Linux为程序(严格讲应该是进程)分配4GB的虚拟独立地址空间。在0~3G的虚拟地址空间里,分为堆、栈,数据段,代码段,bss段。栈的作用主要是程序运行时申请的临时变量进行压栈操作,生存周期是整个函数。堆主要是malloc一块地址空间,存放数据,生存周期是整个函数(除非提前free)。堆只要是由编译器来帮你维护,栈是由程序员自己维护。
栈由编译器自动分配释放,存放函数的参数值、局部变量的值等都放在栈中。在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。
堆一般由程序员分配释放,若程序员不释放程序结束时由系统回收。堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的。堆的大小受限于计算机系统中有效的虚拟内存。
http://blog.csdn.net/hairetz/article/details/4141043
堆允许你存不限量的数据(当然受到物理内存总数的制约)
栈允许你存储函数的局部变量,因为函数中还会调用函数,而且如果函数调用自身,必然一个变量名的变量需要为每次调用存储一个副本,所以用堆栈最合适。
初学者理解这两点就可以了。