对堆栈的一点理解
堆栈虽然在一起说,但是却不是一个概念,简单的介绍一下吧:
堆:在内存区域里,可以是不连续的,在C或C++语言里,可以由程序员管理,有着先进先出的特性,类似于数据结构中的链表,队列的方式。在运行时,堆中的数据占用的大小是在运行时动态分配的,也正因此,堆是采用二级缓存,数据的处理速度相比栈来说,比较慢。
栈:在内存区域里,是连续的一段内存区域,由操作系统本身进行管理,有着先进后出的特性,还有一个特点就是,在栈中的数据是可以被共享的,对于栈来讲,其实不同的操作系统,栈的容量和栈顶的地址是被定义好的,在栈中的数据处理速度仅次于CPU中的寄存器,属于一级缓存管理。
补充说明一下:堆栈的管理一般跟编译器有关,在C和C++中,内存的分区主要有,堆、栈、静态区、代码区等
堆:存放数据,由程序员自己定义
栈:存放局部变量名,函数参数等
静态区:存放全局变量和静态变量
代码区:存放二进制的代码
对于java语言的管理,会有所不同,例如java中的垃圾收集机制,会对堆栈的管理更深入。