内存管理(Memory)

转载 shared_ptr四宗罪

本文转载自:http://blog.liancheng.info/?p=85转载的目的是:本Blog连载了多篇内存管理相关的文章,由于我本人比较排斥智能指针(在大学的时候写过几个,当时觉得这种方式很“神奇”,但是实际工程中绝少用过),所以此类内存管理方式并未深入探讨,这一篇弥补了这个不足。我不久前写过一篇“C++良好代码风格之我见 - 兼谈boost的工程实用价值”,里面概要描述了我对智能指针的态度,这篇shared_ptr可以认为是我关于shared_ptr的观点补充。建议大家去该文的出处看看,有些评论内容读起来也是很有意义的。----在基于C++的大型系统的设计实现中,由于缺乏语言级别的GC支持,资源生存周期往往是一个棘手的问题。系统地解决这个问题的方法无非两种:使用GC库 使用引用计数 严格地说,引用计数其实也是一种最朴素的GC。相对于现代的GC技术,引用计数的实现简单,但相应地,它也存在着循环引用和线程同步开销等问题。关于这二者孰优孰劣,已经有过很多讨论,在此就不搅阅读全文>

发表于 @ 2009年06月24日 22:04:00|评论(loading...)|举报|收藏

原创 C++内存管理变革(8):No Lock(无锁)的GC Allocator

随着多核趋势的明朗,对软件来说,这意味一次巨变。多核时代,注定要改变计算机发展历史。在我们还在努力学习OO方法论时,须不知,一场新的颠覆性的编程革命到来了。内存管理是程序语言中的最基础的设施。如果你长期做服务端的开发,一定知道,服务器性能调优的关键在于内存管理。为什么GC Allocator是No Lock(无锁)的?阅读全文>

发表于 @ 2008年03月05日 16:25:00|评论(loading...)|举报|收藏

原创 C++内存管理变革(7):基于ScopeAlloc的STL容器

在前文(请参阅《C++内存管理变革(6):通用型垃圾回收器 - ScopeAlloc》),我们介绍了ScopeAlloc。既然我们称之为一个通用型的GC Allocator,那么这里我们就谈谈如何用ScopeAlloc来改造STL的容器,它们包括:std::list, std::map, std::set, std::multimap, std::multiset。阅读全文>

发表于 @ 2008年02月04日 15:03:00|评论(loading...)|举报|收藏

原创 C++内存管理变革(6):通用型垃圾回收器 - ScopeAlloc

在前文,我们引入了GC Allocator(具备垃圾回收能力的Allocator),并提供了一个实作:AutoFreeAlloc(详细内容参见《C++内存管理变革(2):最袖珍的垃圾回收器 - AutoFreeAlloc》)。但是,如前所述,AutoFreeAlloc是有其特定的适用环境的(它对内存管理的环境进行了简化,这种简化环境是常见的。详细参阅《C++内存管理变革(3):另类内存管理 - AutoFreeAlloc典型应用》)。那么,在AutoFreeAlloc不能适用的情形下,我们可以有什么选择?本文要讨论的,正是这样一个GC Allocator实作。它所抽象的内存管理的环境比之AutoFreeAlloc复杂许多,适用范围也广泛很多。这个GC Allocator我们称之为ScopeAlloc。阅读全文>

发表于 @ 2008年01月22日 18:14:00|评论(loading...)|举报|收藏

原创 C++内存管理变革(4):boost::object_pool与gc allocator

这篇文章拖的有点久了。NeutralEvil 在3个月之前就在催促我继续写了。只是出于WinxGui完整性的考虑,我一直在刻意优先去补充其它方面的文章,而不是让人去误会WinxGui是一个内存管理库了。:)言归正传。我们在内存池(MemPool)技术详解已经介绍了boost::pool组件。从内存管理观念的变革来看,这是是一个传统的MemPool组件,尽管也有一定的改进(但只是性能上的改进)。但boost::object_pool不同,它与我在C++内存管理变革强调的观念非常吻合。可以认为,boost::object_pool是一种不通用的gc allocator组件。阅读全文>

发表于 @ 2007年04月21日 20:59:00|评论(loading...)|举报|收藏

原创 WINX的STD_NEW与MFC共存问题

WINX的 AutoFreeAlloc 受到了广泛的关注,很多读者反应这对他们很受启发。昨天有读者反馈了 STD_NEW 与 MFC 不能共存的问题,我在这里想谈一下这个问题。阅读全文>

发表于 @ 2007年03月08日 11:20:00|评论(loading...)|举报|收藏

原创 WINX窗口类对象的内存管理

为了引入WINX窗口类对象的内存管理(生命周期模型),我绕了一大圈子。实在是,内存管理太重要了,花多少口舌介绍它都不过分。阅读全文>

发表于 @ 2007年01月11日 22:11:00|评论(loading...)|举报|收藏

原创 C++内存管理变革(3):另类内存管理

有了AutoFreeAlloc后,C++程序员也可以象GC语言的程序员一样大胆new而不需要顾忌什么时候delete。阅读全文>

发表于 @ 2007年01月10日 00:13:00|评论(loading...)|举报|收藏

转载 Java的内存泄漏

写得非常好,推荐。虽然说得是Java,但对其他gc语言如C#等,也是一样的。 Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。阅读全文>

发表于 @ 2006年12月21日 22:33:00|评论(loading...)|举报|收藏

原创 跨模块内存管理的陷阱

由于编译器、编译模式的不同,不同模块的内存结构与管理程序往往并不相同。因此,如果我们在一个模块申请内存,而在另一个模块中释放,这是一个不安全的做法。阅读全文>

发表于 @ 2006年12月21日 22:02:00|评论(loading...)|举报|收藏

用户操作
[即时聊天] [发私信] [加为好友]
许式伟
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
许式伟的公告

本博客内容除非特殊说明均属原创,如需转载、引用其中的部分文字,请注意以下几点:

1)请在转载(引用)的内容开始添加本人署名,并提供本博客中相应文章的链接。如你的作品为非电子读物或纯文本,请给出链接的url。

2)请勿用于商业用途。

3)如果愿意,请给我邮件:xushiweizh@gmail.com,让我知道我的东西到哪去了。谢过。

重要链接

文章分类
收藏
WINX团队
ebasil的专栏(RSS)
VisualFC/WINX专栏(RSS)
任风行(一路奔跑)(RSS)
绅士亦花心之WINX相关(RSS)
许伟群的专栏(RSS)
友情链接
QWL1996的专栏(RSS)
Sting的专栏(RSS)
SunHui的专栏(RSS)
不亦快斋(RSS)
于无声处(RSS)
手机开发论坛
珠穆朗玛(老汉)(RSS)
福&柯实验室(RSS)
存档
软件项目交易
Csdn Blog version 3.1a
Copyright © 许式伟