Gc 是一种失败的内存管理模式


#131

shared_ptr is not GC?


#132

不是.

GC 是这样一种内存管理手段: 他通过单根遍历所有的对象, 删除不可达对象.

shared_ptr 基于引用技术实现内存自动管理, 但是并不是基于"对象可达" 这样的判断.

GC 是不确定的, 但是 shared_ptr 是确定的. shared_ptr 利用的是 C++  的 raii 机制来自动管理引用计数.

GC 在实现上可以使用引用计数, 但是引用计数本身不是 GC


#133

依据?

另外,我支持 @mikeandmore ,先不说编程语言,从对人类语言的驾驭、文明和逻辑上来看比其他人优秀。


#134

你有能耐把H.Sutter从WG21 chairman的位子上撵下来再扯。 之前先给别人科普一下怎么用引用计数取代GC来解决高并发ABA跟吞吐量问题。


#135

对ownership的思考本来就是程序员的义务。指望GC完全取代这里程序员的工作跟指望立刻可用的强AI一样异想天开。在鼓吹易用性这点,GC毫无疑问地是失败了。 如果是普通的最终用户的玩具代码,默认GC倒是无可厚非。 另外,用libstdc++(抄的boost)这样的具体实现来解释跟“编译器无关”也是个比较扯的说法。我记得std::shared_ptr不加入显式修改引用计数的原因之一就是为了实现的直接优化(静态过程间分析之类)。没有人保证任何std::shared_ptr实现和编译器无关。 当然,没干货就想一杆子打倒GC的拉低C++用户平均智商的幼稚派我还是要打脸的。不过证明某人C++水平拙计的坑要多少有多少,还是先让GC盲信者醒醒脑比较现实。C++固然有很多蠢用户,但比大多数强迫使用GC的语言——尤其很多只用过这类语言(对资源管理没概念)的用户来说,还是比较容易有正当的优越感的:他们不会推脱自己对履行义务的无能而大量地制造隐藏缺陷的半吊子烂程序顺带愚弄最终用户。

顺便这个话题上我可以多扯两段——干货。 首先GC pause很多情况是可以被接受的,然而GC带来的内存开销使存储利用率非常低。这在移动设备上尤其明显,以致到没法忍受的地步:sealedabstract.com/rants/why-mobile-web-apps-are-slow。这里资源限制导致GC的如意算盘就彻底没戏唱了。但是,即便资源充足,就该挥霍浪费还洋洋自得么?难道用户有义务就要供着烂实现,实质上放弃“多任务”的机会了?服务器姑且不论,个人电脑如果尽是这种实现显然会天下反。找找MineCraft在这里是怎么被吐槽的吧。 其次,GC和引用计数显然都不是相互取代的关系。上面提到多线程引用计数的缺点的确存在,但未必就是使用GC的充足理由。 一个实例可以搜《shared_ptr的四宗罪》。这里解决性能问题的正确姿势是:首先尽量使用std::unique_ptr取代std::shared_ptr,这样根本就不会有维护计数的开销。GC可能可以缓解一部分性能问题,但是会造成其它问题。 在没有C++11的支持下用boost是没办法解决这个问题的。用库的方法可以解决——本质上是通过模板“发明”出右值引用类型(某个引入右值引用的WG21 paper里A.Alexandrescu的mojo库就是这么干的),虽然对于混WG21的个别PLT/C++专家来说也没那么复杂,但已经繁琐到对于大多数高级用户都不怎么适合实用了(我至今也没看过有谁的产品代码里用过),所以这里就比较杯具了。依赖boost::shared_ptr以迁就过时的不支持C++11的实现并没有多少值得赞扬的地方,相反是一种绥靖,比GC也高明不到哪里去(相比之下boost::thread比std::thread多些功能,姑且用一下也倒还算合理)。


#136

不需要多少直接的依据就足够支持这个观点(指根本就不懂资源管理;C++经验无所谓,时间上J.Gosling大概比我还长点,不过斤两嘛……)了,并且更能说明问题。不仅如此,在很多事实上被证明失败的设计里面就能看出对程序语言理论、编程范式和语言设计(实现暂且另说)的一知半解、偏执狂以及缺乏先见之明——比如前无古人后无来者的checked exception(给Java8添了多少乱?)。 更多的例子嘛,比如:www.chinaunix.net/old_jh/23/1406918.html


#137

嘛, @FrankHB 果然火药十足。不过好像语文老师死的早的样子,很吃力的终于勉强看明白你到底在说啥了 。。。。。


#138

#139

@FrankHB


#140

本主题现在是横幅主题。它将出现在每页的顶部,除非用户将其隐藏。


#141

#142

#143

本主题已经不再是横幅主题。它将不在每个页面的顶部显示。


#144

为什么不提一提unique_ptr,这东西在非多线程共享数据的时候是神器啊


#147

评论比原文还精彩,感觉像看了一场武林对决,每个毛孔都透着舒服


#148

不过还是喜欢看你们冷静的讨论技术,不要带有情绪化的言辞,在自己看是很傲骄的语言,在别人看意义可能就完全不同了


#149

有时候起一个惊世骇俗的标题警醒一下路人也是不错的办法,这可能就是mikeandmore所说的误导,其实我们都不是圣人,哪有那么多完美,提出一个标新立异的观点,也可以说是一种创新了;microcai似乎并不是介意对方挑刺,主要是介意对方的叙事方式,种一棵树很难,砍倒他只需要几下,从这种心境出发是可以理解,但是现在是快消费时代,人哪里有那么多耐心去种树,看到你的树长歪了,修修枝也是一种帮助,何不