内存管理
文章平均质量分 69
brahmsjiang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
哈希表和双向链表实现LRU
LRU(Least Recently Used)即最近最少使用,是一种内存管理算法。最近在Linux的缓冲区管理也看到了使用LRU算法,即利用哈希表进行 O(1) 复杂度的快速查找,利用双向链表(里面的元素是缓冲头)对缓冲块进行管理和更新。原创 2024-09-14 15:52:11 · 643 阅读 · 0 评论 -
逻辑地址、线性地址、物理地址和虚拟地址理解
采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。逻辑地址和物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。机理 逻辑地址(或称为虚拟地址)到线性地址是由CPU的段机制自动转换的。保护模式未开启分页时,cs作为段选择子,以此获取全局描述符表gdt中段描述符中的段地址,段地址+段内相对偏移地址=物理地址;是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。原创 2024-08-24 20:53:38 · 515 阅读 · 0 评论 -
C++ lambda按引用捕获导致的空悬指针问题
该Wrap也有const版本和非const版本的重载,const版本在捕获类成员函数的指针时,对其用了按值捕获[&, f](即cmd),而非const版本在捕获类成员函数的指针时,对其默认用了按引用捕获[&](即cmd1)。在执行cmd.Execute()是没有问题,而执行cmd1.Execute()发生了crash,通过debug发现按引用捕获类成员函数指针,在Wrap()的时候可以取到类成员函数的地址,但一旦退出Wrap(),该类成员函数的地址不复存在。lambda可以按值捕获,也可以按引用捕获。原创 2024-07-08 19:01:16 · 989 阅读 · 0 评论 -
分配自定义内存对齐的内存块的aligned_malloc实现分析
于是通过运算reinterpret_cast(reqBlockAddr + offset) & (~alignment),注意这里的alignment已经自减了(如31),结合刚刚所说31的意义,(reqBlockAddr + offset)即(reqBlockAddr + sizeof(void*) + (--alignment))这个地址不但剔除了个额外备用指针,还把31个byte的余量都剔除了,该地址到内存块末尾正好是我们申请的内存100byte。这样对常规的数据来说没有问题。原创 2024-06-24 11:54:17 · 887 阅读 · 0 评论 -
《Linux0.11源码解读》理解(一) 从开机到加载bootsec
计算机启动时, 内存(RAM)没有任何东西, 自然也无法跑操作系统. 但是可以执行固化在ROM里面的BIOS程序. 在按下电源键的一刻. CPU的cs和ip寄存器硬件被设置为0xf000和0xfff0, 于是cs:ip也就指向0xffff0这个地址, 而这个地址正是指向了ROM的BIOS范围(这里是0xfe000~0xfffff, 20根地址线全部范围0x0000~0xfffff, 这个范围包括RAM、ROM、其他map的外设).下的程序,它的中断调用都是建立在中断向量表基础上的。原创 2023-04-20 16:09:00 · 643 阅读 · 0 评论
分享