1、生长方式不同堆是向高地址扩展也就是常说的向上生长。是不连续的内存区域。栈是向低地址扩展也就是常说的向下生长。是连续的内存区域。空间大小不同堆的大小可以高达4G在32位Linux里系统有效的虚拟内存也有2G。
2、直接在进程的地址空间中保留一块内存,虽然用起来最不方便。但是速度快,也最灵活。
3、堆和栈的区别:堆栈空间分配区别:栈(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等。
4、主体不同堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
5、内存区域不同堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
6、栈是系统数据结构,它是流程/线程的唯一。堆是函数库的内部数据结构,不一定是唯一的。不同堆分配的内存不能相互操作。堆栈空间有两种静态分布和动态分配。静态分配由编译器完成,例如自动变量(自动)分布。
静态存储区,全局变量和静态变量被分配到同一块内存中;常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,是不允许修改的。静态存储是main函数运行前分配内存并初始化;常量存储是固化在执行文件上的数据。
全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。
如楼上所说,常量存储区里面的数据是放在代码段里的,不占内存。静态存储区是在内存空间中的,在其所属的类(或文件)中是全局的。c语言中const好像没有用处。staticconstinta=10;我个人认为是存到静态区的。
静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。
常量是说:“不能修改!或强烈建议别修改!”,const仅说明变量(或者函数)的不可修改性(或不修改别人)。静态是说:“它是在静态数据区的变量”,static影响变量的作用域和存储域。
堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
主要的存储结构是顺序存储和链式存储(基本这两个就OK了)。而逻辑结构是指线性表(栈、队列属于线性表的范畴)、图、二叉树等概念。
栈和队列属于线性结构是对的。什么是栈:栈(Stack)是一个后进先出(Lastinfirstout,LIFO)的线性表,它要求只在表尾进行删除和插入操作。
本文暂时没有评论,来添加一个吧(●'◡'●)