c++的内存管理(raii->shart_ptr->垃圾回收)

c++ primer 5版,12章。讲到了 智能指针shared_ptr,并分析了它的“基本用法(没有提到循环引用的坑、this指针怎么share)和优点(避免一类野指针,程序异常catch是避免内存泄漏等)”。

shared_ptr是否真的可以解决c++里内存管理的很多难题呢?

如何用shared_ptr解决这些难题?

有没有其它方法解决这些难题?

这就是本文想要弄明白的主题。

 

1.

参考:

什么情况下 C++ 需要垃圾处理机制?

https://www.zhihu.com/question/308638046

这个链接里,很多人的观点不同,但都值得去理解和学习。

 

2.

c++11里shared_ptr的用法相关(循环引用的避免在大项目里难以保证----这个在《什么情况下 C++ 需要垃圾处理机制?》里,大家已经分析过了。但还是有用的。)

 

参考:

(1)

浅谈shared_ptr及shared_ptr涉及到的循环引用问题

https://blog.csdn.net/qq_34992845/article/details/69218843

这个链接,过多关注代码细节,反而不清晰。不过,例子不错。想看源码时,可以参考下。(我没看源码,不知道这个文章是否分析的有问题。)

(2)

shared_ptr循环引用&定置删除器

https://blog.51cto.com/11142019/1846847

这个链接,讲解比较简明.

(3)

解决:网上大部分是说用weak_ptr. (另外1种方式,显式删除,不太懂什么意思,没找到代码示例。也很少有人提到。)

 

3.

c++垃圾回收机制:

(1)

参考:

C++中垃圾回收机制中几种经典的垃圾回收算法

https://blog.csdn.net/u012611878/article/details/78947267

这个链接,讲述了垃圾回收的基本原理. 前置知识.

提到了最关键的 Mark & Sweep 算法

(2)

参考:

c 语言的 mark-sweep 实现

https://blog.csdn.net/yangzm/article/details/69525073

原文链接:

http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/

代码已经认真跑过一遍(200行左右)。相当好的东西。

清晰的说明了 垃圾回收的核心 Mark & Sweep 算法 实现细节。

(链表保存所有分配的内存,以备后续Sweep。当前栈里的元素递归前驱和回溯,Mark为“正在使用1”。按链表顺序Sweep并清理Mark为"无用0"的内存。)

对理解其它语言(例如Lua)里的“虚拟机”及其回收机制都有帮助。

另外,这个代码的作者,写了《游戏编程模式》。是个很优秀的同行。

(3)

参考:

https://zhuanlan.zhihu.com/p/266682616

这里提到了

非常广泛的一个C++垃圾回收器————BoehmGC

应该是一个生产环境可以使用的东西。(没试过,以后抽空了解下。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值