C++内存管理 - 17 此笔记需要等待更新和确认。 std::alloc 源码剖析 视频14~27没什么难度。略 源码剖析8 有几个要点需要注意 248行的chunk已经是char**类型了。所以260行直接将其+n后转为obj*类型。259~261行的要点是,首先261行的for循环是从1开始的。因为切割出来后将第一块直接返回回去。不需要再放回去切割。所以259行直...
C++内存管理 - 16 此笔记需要等待更新和确认。 New Handler 当使用new申请内存失败时会抛出"bad alloc"异常,此前会调用一个由std::set_new_handler()指定的错误处理函数(”new-handler”)。 如下是一个最简单的形式 void outOfMem(){ std::cout<<"Unable to all...
王道操作系统笔记-内存(23)– 内存管理5 非连续分配管理方式(1)基本分页存储管理 分页的目的是解决外部碎片。因为之前的分配方式强调必须连续。那我们让它不连续就可以了。 什么是分页储存 进程(虚拟内存)分割出来的大小相等的块叫 页 或 页面(page)。物理内存中分割出来的大小相等的块,叫 页框 或 页帧 或…(frame) 进程的页面对应着内存的页框。 分割的意义...
C++内存管理 - 14~15 此笔记需要等待更新和确认。 Static Allocator 如果我们的每一个class都想要分配内存池,那么我们就需要在每个class内部都写自己的内存分配函数。这样会很麻烦。所以我们应该把内存分配函数抽象出来,写入一个新的class。这样的class就叫做static allocator。 我们的allocator会被外面的类的对象调用。...
王道操作系统笔记-内存(22)– 内存管理4 动态分区分配算法
王道操作系统笔记-内存(21)– 内存管理3 内存空间的分配与回收 连续分配管理方式 连续分配指的是为用户进程分配的内存空间必须是连续的。 单一连续分配 在单一连续分配方式中,内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据。用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区空间。 优点:实现简单。无外部碎片。...
王道操作系统笔记-内存(20)– 内存管理2 内存空间的扩充 覆盖技术 这个非常像笔记c++内存管理12~13中用union联合体来优化next指针的操作 覆盖技术的思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。内存中分为一个“固定区”和若干个“覆盖区”。需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)。不常用的段放在“覆盖...
王道操作系统笔记-内存(19)– 内存管理1 操作系统如何进行内存管理 操作系统负责内存的分配和回收 操作系统需要提供某种技术从逻辑上对内存空间进行扩充(虚拟内存) 操作系统需要提供地址转换功能。负责程序的逻辑地址与物理地址的转换。 操作系统需要提供内存保护功能。保证各个进程在各自的储存空间内运行,互不干扰。 内存保护 方法一:在CPU中设置一对上、下...
王道操作系统笔记-内存(18)– 内存 逻辑地址和物理地址 物理地址:内存的真实地址。 逻辑地址:相对于进程的起始地址而言的地址。 举例:如果CPU把一个进程的起始地址分配在物理地址的100位。那么该进程如果有一条指令:往地址为79的储存单元中写入10。这条指令中的地址为逻辑地址。所以对应着物理地址的179位。 物理地址和逻辑地址的装换 绝对装入 绝对装入:在编译时,如果...
王道操作系统笔记-进程(17)– 死锁的检测和解除 死锁的检测 死锁的解除 总结