![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内存管理
文章平均质量分 82
brahmsjiang
这个作者很懒,什么都没留下…
展开
-
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 · 432 阅读 · 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 · 308 阅读 · 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 · 468 阅读 · 0 评论