内存管理中的堆与数据结构的堆

       最早关于堆的概念是由汉斯·皮特·兰格(Hans Peter Luhn)在1964年的一篇论文中提出的。在这篇名为《A file structure for the complex, the changing and the indeterminate》的论文中,兰格提出了一种用于管理动态内存分配的数据结构,他将这种结构称为“堆”(heap)

      背景:兰格的堆设计的初衷是为了应对计算机科学领域中复杂、不断变化和不确定的需求。堆的设计使得程序能够在运行时根据需要动态地分配内存,而不需要提前静态地分配固定大小的内存空间。这种动态内存分配机制极大地提高了程序的灵活性和效率,使得程序能够更好地适应不同的内存需求和场景。

内存分配的方式分类:这里只讲连续内存分配非连续内存分配的问题。重点在将连续内存分配中设计设计的思路

内存分配的目的:就是为程序如操作系统和程序分配内存。

而内存的分配可以分为:

内核空间: 放置操作系统相关的代码和数据。(用户不能直接进行操作 ,可以通过调用系统提供的 api 函数)
又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。
内存映射段是高效的I/O映射方式,用于装载一个共享的 动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。
用于程序运行时动态内存分配,堆是可以上增长的。
数据段–存储全局数据和静态数据。
代码段–可执行的代码/只读常量。               
有关内存分配详细的论文:(原文链接:https://blog.csdn.net/AngelDg/article/details/104871782)

连续内存分配的类型:单一连续内存分配、固定内存分配、动态内存分配

单一连续内存:分配内存给单一连续空间,主要用来处理单用户程序的单任务环境。

固定内存分配:将内存分为固定的一些内存区,很明显会产生区内碎片,同时对于内存的利用率不高。

动态内存分配:又称可变分区分配,种动态划分内存的分区、现分女分内存,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此,系统中分区的大小和数目是可变的。

因为是动态的分配,所以涉及到一些内存分配的算法:如最佳,最坏等

因此,回到背景角度,内存可以看做是一个有序的数组,而内存的动态分配和回收的过程就是对于数据的插入和删除的过程,因此堆的数据结构的操作,就是对于内存的管理。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值