堆和栈的区别

来源:互联网 发布:达内学美工费用 编辑:程序博客网 时间:2024/06/18 10:58

1.数据结构中的堆和栈:是两种不同的存储数据的数据结构,即存储方式。堆可以用数组来实现存储。
2.内存中的堆区和栈区:是两种存储空间。堆更加接近于链表。
3.申明:windows下,最好用的办法是用virtual alloc来分配内存,它不存在于堆或者栈中,而是存在于某进程的地址空间。
注意:静态变量不入栈。
《一个程序占用的内存》
—->栈区、堆区、全局区、文字常量和程序代码五部分
—->全局区用来存放静态变量和全局变量
文字常量区用来存放常量字符串
程序代码区用来存放函数体的二进制代码
以下是堆区和栈区的主要区别:
这里写图片描述
申请内存时的区别:
(1)申请栈内存:只要栈的剩余空间大于所申请空间,将提供内存,否则栈溢出异常。
(2)申请堆空间:分为四步
——>Ⅰ:要知道操作系统中存在一个记录空闲内存地址的链表
——>Ⅱ:申请堆空间时,遍历该链表,找到第一个空间大于所申请空间的堆结点
——>Ⅲ:删除堆结点,将该结点的空间分配给程序
——>Ⅳ:首地址记录本次分配的大小,方便后期回收删除。

0 0