您的位置:首页 >> 环保家居

再论C之垃圾回收

时间:2020-06-22 02:40:15 来源:黄石环保厂家 浏览量:4

使用智能指针(smart pointers)

原理:基于引用计数(reference count)。

这种垃圾回收(gc)算法无非都是给每一块分配的内存提供引用计数,然后通过智能指针(smart pointer)自动完成引用计数的加减,如果引用技术减少到零,就代表没有人使用该内存了,这块内存就可以回收了。

如果可以正确的遵从这种gc的使用规则,也就是说你可以正确无误的使用智能指针,那么理论上来说,就不可能存在内存泄漏。

但是现实并不象想象的那么单纯,那么美好。一方面,智能指针的概念仍然没有被C++社区广泛的理解应用,而且智能指针种类繁多,各有各的规则,在代码量多了的时候,有时存在这样那样的失误难免;另一方面(应该是更加令人为难的一点),并不是所有人都那么喜欢用智能指针,而且原生指针的使用很多情形下避无可避友们还发现,我们不得不在原生指针与智能指针之间进行转换。

所以这样的gc的最终结果是,掌握引用计数的规则最终似乎比掌握new/delete的规则容易不了多少,有时甚至让新接触该技术的程序员感到畏惧。另外,引用计数的引入,出乎意料的产生了一个负作用:调试内存泄漏变得比原先困难多了。

所以引用计数和智能指针实现的gc不能从根本上解决内存泄漏问题。

真正的垃圾回收(garbage collector)请注意,C++并非不支持GC。我们知道BN一直强调的是,GC是C++的可选组件,不是必需的。 这里是C++的GC相关代码以及文档: C++/CLI(Microsoft的托管C++) (不少人用这个GC来进行开发)

评价:如果你的系统很单纯,采用这个是不错的主意。因为这意味着你的C++语言已经和Java、C#没有任何区别。但是请注意,这要求你的系统是纯粹的防止物资被盗、过期变质、毁损和流失。  第三十九条 单位应当加强物资保管与领用控制。除物资管理部门及仓储人员外,也就是说:

你没有是使用第三方代码。或者,你的第三方代码中,内存也是托管的(通过GC创建出来的)。

小心与那些你无法取得源代码的DLL(例如,Win32 API/你购买的第三方组件)打交道。与C#一样,你需要小心,不要让你的程序出现Win32 API还在访问数据,而被GC回收的情形。不过这种情况在C++中比C#要好得多:毕竟在C++中,你对GC的控制能力远远强于C#。

特别地、如果你使用了COM,那么你将很痛苦:因为COM基于引用计数来管理对象生命周期,这意味着GC基本上对其无能为力。除非你像C#一样,为每个COM组件提供一个Wrapper。 补充:

由于GC依赖语言的自省(reflection)能力,而C++这方面的能力无疑相当得弱,因此C++中的GC是尴尬的。 请注意,GC是排他的,这意味着两个GC不能在一起工作。因此,除非C++标准规定了必须使用那个GC,不然托管的C++代码,存在着交流困难。

支持垃圾回收的allocator(gc allocator)代码与文档: C++内存管理变革 AutoFreeAlloc(最袖珍的垃圾回收器) boost::object_pool(注意,boost::pool不属于gc allocator,而只能说属于allocator) 待续... 评价:半自动的垃圾回收,比GC简单、高效、容易控制。

查看本文来源

灰指甲难治的原因是什么
南阳白癜风好的医院
自贡治疗白斑病费用
相关阅读
阿拉斯加犬患上犬瘟后应如何医治位置

阿拉斯加犬患上犬瘟后,应怎么办月夜愁:可以按之前的卖狗药物继续治疗,犬瘟毕竟是一种死亡率较高的传染病,建议主人到正规医院检查治疗,希望...[详细]

2022-06-03
阿拉斯加犬总睡觉没精神是怎么了位置

我家阿拉斯加犬7岁,公,现在总是睡觉,叫也不动,除了吃饭,散步走路很慢。剩下的时间就是睡觉。早上也是没精神!是老年的表现还是生病了。吃饭...[详细]

2022-06-03
阿富汗猎犬口吐黄水液体不吃东西是怎么了位置

我家阿富汗猎犬得了一种病,嘴里总是有黄色液体流出,而且伴有臭味,一发病的时候就吃不了东西,就连喝口水都困难,给它查过也查不出是口腔的原...[详细]

2022-06-03
阿富汗猎犬为什么肚子总咕噜咕噜响位置

阿富汗猎犬肚子咕噜咕噜总响,不知道是什么情况?小胖泡:我家的小狗肚子总是咕噜咕噜得响声音很大,感觉就好像是人有的时候肚子串气特别强调一...[详细]

2022-06-03
阻止贵宾犬偷饭的方法养成贵宾犬良好进食习位置

每个狗狗都会患病,但是重要的是我们要知道如何护理它们,生病时期的贵宾犬在精神上也是非常脆弱的,主人们对狗狗的关爱是最重要的,这也是狗狗...[详细]

2022-06-03
异国短毛猫美容步骤有哪些美容需注意什么位置

异国短毛猫美容步骤有哪些?美容需注意什么?异国短毛猫美容步骤有哪些?美容需注意什么?1960年左右美国的育种专家将美国短毛猫和波斯猫进行交配...[详细]

2022-06-03
友情链接