t**r 发帖数: 3428 | 1 有了智能指针 std::function这些东西
我基本在代码里不用任何delete.也就是不用太担心内存
我可以轻松地写callback
我可以开心的用丰富的collection和operator overload
真的没必要上go. |
z****e 发帖数: 54598 | |
a***n 发帖数: 538 | 3 shared_ptr真的挺慢的。
而且多线程用的时候,感觉需要memory barrier。 |
n*****3 发帖数: 1584 | 4 智能指针 can be thinking of another way to do GC/memory manager
【在 z****e 的大作中提到】 : 没有gc的语言都是耍流氓
|
T********i 发帖数: 2416 | 5 你这句评论就能看出来你还没搞懂memory barrier.
【在 a***n 的大作中提到】 : shared_ptr真的挺慢的。 : 而且多线程用的时候,感觉需要memory barrier。
|
a***n 发帖数: 538 | 6 http://www.reddit.com/r/cpp_questions/comments/2tzzz2/why_does_
以前的boost好像没有,如果不手动加一个barrier的话,会偶尔segfault。
【在 T********i 的大作中提到】 : 你这句评论就能看出来你还没搞懂memory barrier.
|
T********i 发帖数: 2416 | 7 C++ 11这个设计属于脑袋被驴踢了。
其实asm voltile memory用起来更爽。
但是不是所有的CPU体系结构都能用。
但是我只在乎X86,顶多加上arm。
【在 a***n 的大作中提到】 : http://www.reddit.com/r/cpp_questions/comments/2tzzz2/why_does_ : 以前的boost好像没有,如果不手动加一个barrier的话,会偶尔segfault。
|
a***n 发帖数: 538 | 8 撇开barrier不说,shared_ptr的计数器还是要被多个线程同时读写,就算是x86的原子
操作,效率也高不到哪里去。
【在 T********i 的大作中提到】 : C++ 11这个设计属于脑袋被驴踢了。 : 其实asm voltile memory用起来更爽。 : 但是不是所有的CPU体系结构都能用。 : 但是我只在乎X86,顶多加上arm。
|
T********i 发帖数: 2416 | 9 当你用到线程这个词的时候,你已经和高效率无缘了。
【在 a***n 的大作中提到】 : 撇开barrier不说,shared_ptr的计数器还是要被多个线程同时读写,就算是x86的原子 : 操作,效率也高不到哪里去。
|
T********i 发帖数: 2416 | 10 再给你透漏一点点。
1。原子操作本身就是硬件memory barrier。
2。原子操作都是写操作。读操作只要aligned都是原子的。primitive type。
3。效率高不到哪里去的言论纯属臆断。效率可以做到基本linear。取决于你怎么做。
【在 a***n 的大作中提到】 : 撇开barrier不说,shared_ptr的计数器还是要被多个线程同时读写,就算是x86的原子 : 操作,效率也高不到哪里去。
|
|
|
a***n 发帖数: 538 | 11 原子操作只对操作本身的变量有barrier,如果share_ptr的计数器本身和指向的变量之
间没有同步,最后一个指针释放的顺序会不对。以前boost实现肯定有问题,加了
barrier以后就不出错,所以我也没有仔细去研究是怎么回事。
两个线程同时操作同一个变量,L1怎么的都会被invalidate,效率怎么会高?
【在 T********i 的大作中提到】 : 再给你透漏一点点。 : 1。原子操作本身就是硬件memory barrier。 : 2。原子操作都是写操作。读操作只要aligned都是原子的。primitive type。 : 3。效率高不到哪里去的言论纯属臆断。效率可以做到基本linear。取决于你怎么做。
|
T********i 发帖数: 2416 | 12 我一年前说过:假如现在太阳突然熄灭,对地球一点影响都没有,为什么?
因为要过大约8分20秒以后才能影响到地球。
只有发生在光锥内事件需要遵循因果律。
你要用狭义相对论的方法论来理解memory barrier。
【在 a***n 的大作中提到】 : 原子操作只对操作本身的变量有barrier,如果share_ptr的计数器本身和指向的变量之 : 间没有同步,最后一个指针释放的顺序会不对。以前boost实现肯定有问题,加了 : barrier以后就不出错,所以我也没有仔细去研究是怎么回事。 : 两个线程同时操作同一个变量,L1怎么的都会被invalidate,效率怎么会高?
|
a***n 发帖数: 538 | 13 之所以用shared_ptr,就是为了不每次都要考虑什么时候释放内存。如果需要每次用的
时候都要想一想因果关系,还不如手动处理内存,或者用有gc的语言。
【在 T********i 的大作中提到】 : 我一年前说过:假如现在太阳突然熄灭,对地球一点影响都没有,为什么? : 因为要过大约8分20秒以后才能影响到地球。 : 只有发生在光锥内事件需要遵循因果律。 : 你要用狭义相对论的方法论来理解memory barrier。
|
T********i 发帖数: 2416 | 14 shared_ptr用的是最简单的memory barrier。总纠结这个shared_ptr其实对你的理解没
有什么帮助。
【在 a***n 的大作中提到】 : 之所以用shared_ptr,就是为了不每次都要考虑什么时候释放内存。如果需要每次用的 : 时候都要想一想因果关系,还不如手动处理内存,或者用有gc的语言。
|
a***n 发帖数: 538 | 15 有本事你去实现一个不需要barrier的,我现在也不用c++了。
【在 T********i 的大作中提到】 : shared_ptr用的是最简单的memory barrier。总纠结这个shared_ptr其实对你的理解没 : 有什么帮助。
|
T********i 发帖数: 2416 | 16 所以我说你对barrier没完全理解也没错呀?
shared_ptr用的是atomic指令,也只能用atomic指令。atomic指令就是barrier。这些
都没错。
但是barrier不一定是atomic指令。
【在 a***n 的大作中提到】 : 有本事你去实现一个不需要barrier的,我现在也不用c++了。
|
a***n 发帖数: 538 | 17 atomic只是对计数器本身,对于指向的变量,最后一个指针消失之前,在两个进程中对
计数器和变量本身是没有因果关系的。这个帖子我也不想回了,你自己去想吧。
【在 T********i 的大作中提到】 : 所以我说你对barrier没完全理解也没错呀? : shared_ptr用的是atomic指令,也只能用atomic指令。atomic指令就是barrier。这些 : 都没错。 : 但是barrier不一定是atomic指令。
|
w***x 发帖数: 105 | 18 1. atomic操作不太可能降低性能太多
2. boost的开发者不可能犯这么基础的错误,即使我没看boost的实现,但一个简单的
cmp & exchange也能很简单的解决问题
3.我从来没觉得这些c++智能指针能够真正解决内存泄露问题 |