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