计算机网络 - 数据链路层1 数据链路层 功能概述 为网络层提供服务。无确认无连接服务,有确认无连接服务,有确认面向连接服务。有连接一定有确认! 链路管理,即连接的建立、维持、释放(用于面向连接的服务)。 组帧 流量控制。 差错控制。(帧错、位错) 封装成帧 封装成帧就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比...
计算机网络 - 传输层1 传输层 传输层的功能 传输层提供进程与进程之间的逻辑通信。使用网络层的服务为应用层提供通信服务 复用和分用 复用:应用层所有的应用进程都可以通过传输层传输到网络层。 - 分用:传输层从网络层收到的数据可以交付给不同的应用进程。 对收到的报文进行差错检测 TCP 三次握手 ACK不...
C++ STL - 2 - 迭代器设计思路。萃取。 什么是萃取? 三个字:中间层 我们这里先以侯捷老师的iterator_traits做为例子。 我们知道,iterator迭代器本身有五个属性。我们也知道迭代器是一个class。所以也就是迭代器类有五个typedef。分别是: namespace std { template <typename T> ...
imgtemp
C++ STL - 1 - List List G2.9 List自己本身只有一个指针指向了一个节点。它的数据__list_node和数据结构list是分开设计的。 数据本身不做过多叙述。一个指针指向前一个节点,一个指针指向下一个节点,一块数据区域。 List的迭代器 注意i++和++i的重载区别 在C++中,由于++i和i++都只有一个参数,那么...
Linux 内存管理 侯捷老师的视频G2.9std alloc部分我们可以理解内存分配器是如何管理内存的。也就是维护一些具有固定内存大小的自由链表。如有分配需求就将其取下链表分配出去。如果不够就再调用malloc进行申请。然后进行切割。 这里的内存管理依旧是比较上层的。我们后来也提到了malloc会使用libc的C运行时库里面的mmap系统调用和brk系统调用进行分配内存分配。大内存使用...
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会被外面的类的对象调用。...