BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #97013同步于 2017/12/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于c++智能指针的问题

bixiaopeng
2017/12/12镜像同步15 回复
求问各位大大 因为工作需要最近接触了一下c++,学习了一下智能指针这个东西的使用。 个人理解是靠引用计数来实现的内存管理工具。这个认识正确吗? 那么和靠引用计数实现的垃圾回收器有啥区别? 要是不用裸指针,都用shared_ptr,传说中性能能上天的c++的性能会变差吗?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
specops机器人#1 · 2017/12/12
对 智能指针是利用RAII实现的 没有garbage collector在运行 会 但是影响很小 大部分场景基本可以忽略
bixiaopeng机器人#2 · 2017/12/12
【 在 specops 的大作中提到: 】 : 对 : 智能指针是利用RAII实现的 没有garbage collector在运行 : 会 但是影响很小 大部分场景基本可以忽略 谢谢~!
specops机器人#3 · 2017/12/12
you are welcome~ 【 在 bixiaopeng (Subray) 的大作中提到: 】 : 谢谢~!
ilusion机器人#4 · 2017/12/12
纯粹吐个槽,现在哪个语言用靠引用计数实现的垃圾回收器。。。
nuanyangyang机器人#5 · 2017/12/13
python、php、perl、……共同特点是性能差。GTK+GObject、COM+、Swift、HHVM这些历史包袱比较久的东西也在用naive reference counting。 【 在 ilusion 的大作中提到: 】 : 纯粹吐个槽,现在哪个语言用靠引用计数实现的垃圾回收器。。。
nuanyangyang机器人#6 · 2017/12/13
如果要用现代的C++的话,建议看看unique_ptr,基于“所有权”的管理方式。 shared_ptr和垃圾回收器的区别就是它没有语言层面的支持,它只是个库。垃圾回收器是一个由内存分配、垃圾识别、空间回收三部分结合在一起的统一的系统,而且和编译器以及多线程紧密耦合。编译器没有对shared_ptr的特殊认识,不能在运行时帮你找到进程里所有的shared_ptr的位置,编译器也不会帮你插入yieldpoint让程序在需要GC时暂停扫描栈。很多垃圾回收语言能做的事,shared_ptr不能做。比如用backup tracer或者trial deletion帮你破除环形垃圾。也不能使用高性能的bump pointer分配器和移动式的垃圾回收。世界上是有高性能的基于引用计数的GC的,其中一个关键的优化就是把RC计数加减操作推迟到yieldpoint去做,这个C++做不到。当然,某些有垃圾回收的语言,比如perl,实现得极其朴素,也有类似的种种限制。
liuyehcf机器人#7 · 2017/12/13
日常膜拜暖神! 【 在 nuanyangyang 的大作中提到: 】 : 如果要用现代的C++的话,建议看看unique_ptr,基于“所有权”的管理方式。 : shared_ptr和垃圾回收器的区别就是它没有语言层面的支持,它只是个库。垃圾回收器是一个由内存分配、垃圾识别、空间回收三部分结合在一起的统一的系统,而且和编译器以及多线程紧密耦合。编译器没有对shared_ptr的特殊认识,不能在运行时帮你找到进程里所有的shared_ptr的位置,编译器也不会帮你插入yieldpoint让程序在需要GC时暂停扫描栈。很多垃圾回收语言能做的事,shared_ptr不能做。比如用backup tracer或者trial deletion帮你破除环形垃圾。也不能使用高性能的bump pointer分配器和移动式的垃圾回收。世界上是有高性能的基于引用计数的GC的,其中一个关键的优化就是把RC计数加减操作推迟到yieldpoint去做,这个C++做不到。当然,某些有垃圾回收的语言,比如perl,实现得极其朴素,也有类似的种种限制。
ilusion机器人#8 · 2017/12/13
受教了! 【 在 nuanyangyang 的大作中提到: 】 : python、php、perl、……共同特点是性能差。GTK+GObject、COM+、Swift、HHVM这些历史包袱比较久的东西也在用naive reference counting。
unimit机器人#9 · 2017/12/13
暖神是谁?暖神是男是女?暖神到底会多少种语言?程序板块三大未解之谜