内存中的堆和堆栈的区别

队列先进先出,在队头做删除操作,在队尾做插入操作。

栈先进后出,在栈顶做插入和删除操作。

栈和堆栈是一个概念。

堆和它们不同,是一个完全二叉树数据结构,不存在是先进后出还是先进先出。

1. 堆栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。

  在编程中,例如C/C++中,所有的局部变量都是从栈中分配内存空间,实际上也不是什么分配,只是从栈顶向上用就行,在退出函数的时候,只是修改栈指针就可以把栈中的内容销毁,所以速度最快。Java的对象引用就存储在堆栈中;Java中的基本类型(int, char...)是个特例,这种特殊类型不用new来创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,并置于堆栈中;Java中全局变量和静态变量存放在堆栈的全局静态区,局部变量就存放在堆栈中。

2. 堆(heap)是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。

  C/C++分别用malloc/New请求分配Heap,用free/delete销毁内存。由于从操作系统管理的内存分配所以在分配和销毁时都要占用时间,所以用堆的效率低的多!但是堆的好处是可以做的很大,C/C++对分配的Heap是不初始化的。 Java的对象存储在堆中,每当new 一个对象的时候,就会自动在堆里面进行存储分配。

3. 常量存储区是常量值存放的地方,不允许修改,一般位于ROM中。

扫描二维码关注公众号,回复: 3074976 查看本文章

猜你喜欢

转载自www.cnblogs.com/chenloveslife/p/9595356.html