2006年11月
我在《C++内存管理变革:最袖珍的垃圾回收器》一文中,讨论了AutoFreeAlloc这个gc allocator。为了突出我的想法,我对忽略了一些细节的介绍。下面这一篇我觉得介绍得很好,把我没有提及的一些细节也做了介绍。阅读全文>
发表于 @ 2006年11月30日 18:43:00|评论(loading...)|编辑
I decide that all my articles will written both in chinese and in enlish. And I will publish them at the same time.阅读全文>
发表于 @ 2006年11月29日 13:22:00|评论(loading...)|编辑
正准备睡觉的时候,看到sourceforge上的论坛有了一条新消息。阅读全文>
发表于 @ 2006年11月29日 00:29:00|评论(loading...)|编辑
今天google时无意中看到一个wiki上提到了winx。这是一个介绍WTL的网站,作为比较,其中列了一些知名的C++界面库。包括:MFC、ATL、QT、U++、SmartWin++、wxWidgets、VCF、JUCE、WINX、Win32GUI。
无疑,WINX是其中最年轻的一个。作者对各个库均作了简要评价。阅读全文>
发表于 @ 2006年11月27日 23:15:00|评论(loading...)|编辑
现在,我们决定正式启动“WINX可视化开发工具”这个项目。第一步我们将开始着手需求的整理。我们面临的第一个问题是,基于什么开发平台推出WINX可视化开发工具?欢迎大家投上一票。阅读全文>
发表于 @ 2006年11月25日 22:16:00|评论(loading...)|编辑
C++中GC的选择:1) 使用智能指针(smart pointers)2) 真正的垃圾回收(garbage collector)3) 支持垃圾回收的allocator(gc allocator)阅读全文>
发表于 @ 2006年11月24日 02:04:00|评论(loading...)|编辑
这篇短文源于comp.lang.java.programmer跟comp.lang.c++上发生的一场大辩论,支持C++和Java
的两派不同势力展开了新世纪第一场冲突,跟贴发言超过350,两派都有名角压阵。阅读全文>
发表于 @ 2006年11月22日 22:19:00|评论(loading...)|编辑
内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。阅读全文>
发表于 @ 2006年11月22日 00:44:00|评论(loading...)|编辑
由于被问到,如何建立一个winx的程序,我这里简单一步步描述下。这里以Visual Studio 6.0为例。阅读全文>
发表于 @ 2006年11月21日 19:12:00|评论(loading...)|编辑
《C++内存管理变革:最袖珍的垃圾回收器》一文我提到了MemPool技术,以及boost pool组件,这里就介绍一下它。阅读全文>
发表于 @ 2006年11月21日 00:38:00|评论(loading...)|编辑
C/C++最被人诟病的,可能是没有一个内存垃圾回收器(确切是说没有一个标准的垃圾回收器)。本文讨论的内容要点是,在C/C++中实现一个最袖珍的、功能受限的垃圾回收器。阅读全文>
发表于 @ 2006年11月19日 19:48:00|评论(loading...)|编辑
自己重写operator new时,很重要的一点是函数提供的行为要和系统缺省的operator new一致。实际做起来也就是:要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况。阅读全文>
发表于 @ 2006年11月19日 10:54:00|评论(loading...)|编辑
本本买了2年,今天终于重新安装了。于是想到很多与我此时一样烦恼的人,决定写一篇关于装机的文章。阅读全文>
发表于 @ 2006年11月18日 22:34:00|评论(loading...)|编辑
csdn开博1月零12天,PageView突破2万。感谢csdn与各位读者。整理了一下最受欢迎的8篇文章,它们是...
阅读全文>
发表于 @ 2006年11月18日 00:59:00|评论(loading...)|编辑
总之,在我看来,STL的引入allocator,是一件了不起的事情。但是这场变革被忽视了,没有得到贯彻。当然,这也与STL的allocator本身的缺陷有关。 本文要讨论的,正是如何贯彻STL的allocator思想,对其进行适当的改进,以期在C++内存管理观念上产生变革性的突破,彻底淘汰传统的new/delete内存管理方法。阅读全文>
发表于 @ 2006年11月16日 21:41:00|评论(loading...)|编辑
Visual Studio系列中产品中,Visual Studio 6.0是最经典的一个版本,虽然后来有Visual Studio .NET 2003,以及2005,也确实添加了很多让我觉得激动的特性,但是从使用细节的细腻程度上来看,VS 6.0无疑是最棒的。我们一些同事甚至试图把2005的C++编译器独立的拿到Visual Studio 6.0中来用,也不愿意升级到.NET上来用,可见其魅力。
和VS 6.0这个产品的成熟相比,VC++ 6.0的编译器的的确确相对来说有些糟糕,其中最被诟病的是对模板技术支持很不好。下面我想做的一件事情,就是向那些继续留恋VC++ 6.0的朋友,介绍一些小花招,来避开VC++ 6.0的一些编译器缺陷。阅读全文>
发表于 @ 2006年11月16日 21:21:00|评论(loading...)|编辑
WINX:超类与子类(Superclass & Subclass)。阅读全文>
发表于 @ 2006年11月15日 00:41:00|评论(loading...)|编辑
WINX团队目标:
做C++最好的界面库:简单、易用、高效。
打造中国人在世界上一流的开源软件。阅读全文>
发表于 @ 2006年11月14日 01:14:00|评论(loading...)|编辑
我个人最新整理的Google搜索指令大全。如有错误,欢迎大家指正。阅读全文>
发表于 @ 2006年11月14日 00:41:00|评论(loading...)|编辑
在《WINX如何做到可视化界面开发》一文中我曾说预计昨天(周六)会完成它,结果到今天才将其补充完毕,很不好意思,这里向各位读者致歉。阅读全文>
发表于 @ 2006年11月12日 22:09:00|评论(loading...)|编辑
极尽详细的ATL/WTL界面编程的入门教程。
Learning WTL8.0 Part-1
Win32 vs. ATL Windows Programming阅读全文>
发表于 @ 2006年11月12日 16:21:00|评论(loading...)|编辑
WINX一直强调简单易用,可视化开发。前文我亦已经给过在WINX中进行可视化开发的例子:
如何实现Custom Control?如何进行可视化开发?
那么,现在就让我们开始剖析一下,WINX是如何做到可视化界面开发的?
阅读全文>
发表于 @ 2006年11月10日 20:52:00|评论(loading...)|编辑
本文介绍 运行时刻类信息(RuntimeClass)、序列化 的实现机理。阅读全文>
发表于 @ 2006年11月09日 22:22:00|评论(loading...)|编辑
上一篇主要从介绍“如何用”的角度阐述Windows编程。但是我个人习惯“打破沙锅问到底”,很多东西是靠“悟”,而不是“记”。所以这一篇我们聊聊Windows SDK为何会是如今这个样子的。
对于一个经典的WinMain函数,通常包含三步:
注册窗口类(RegisterClass)。
创建并显示窗口(CreateWindow and ShowWindow)。
消息循环(MessageLoop)。即:取得消息 -> 分派消息 -> 处理消息。
窗口程序需要“创建并显示窗口”,这显而易见。关于“消息循环”也容易理解,并且我们在“SW系统简介”中描述已经得非常详细。
我相信最令人迷惑的是:“窗口类”是什么概念?为什么需要RegisterClass?
有人回答:“窗口类”是同类窗口的公共属性,是这一类窗口的共享数据。
有人回答:“窗口类”是同类窗口的默认数据(属性)。
阅读全文>
发表于 @ 2006年11月09日 21:52:00|评论(loading...)|编辑
不少朋友向我征询学习Windows界面编程的方法,每一次,我总毫不犹豫的回答:先去学Windows SDK吧。——是的,如果你要以最快的速度学习Windows编程,那么,你需要从Windows SDK开始。假如你选择MFC或者Delphi/C++ Builder等等,虽然看似你快人一步,但是你仍然困惑着,总有一天,你还是得回头一点一滴了解Windows SDK,而此时,你已经走了不少冤枉路了。。。这其中的道理是很深刻的,本文作者以Joel的《抽象渗漏法则》解释这种现象,深得我心。阅读全文>
发表于 @ 2006年11月09日 00:13:00|评论(loading...)|编辑
1)StreamReader无法取得正确取得当前位置的问题。
这个问题网上看到有人提了,参见:StreamReader缓冲引起BaseStream.Position不能反映当前Read位置的问题。不过它给出的解决方案不太认同。我的文件有几十兆,不想全部读入内存。如果考虑用Stream/BufferedStream,这样就得自己写ReadLine等函数,也不是好招。
2)C#中似乎只有map(即Dictionary),貌似没multi_map?可怜我偏偏要用到这个数据结构。
以上两个问题很希望是我孤陋寡闻,欢迎高手指个招。阅读全文>
发表于 @ 2006年11月08日 14:35:00|评论(loading...)|编辑
首先感谢CSDN, 在我刚刚在CSDN Blog落户一个月之际,就给了我一个惊喜,让我晋升为“C++专家”了。我很高兴,因为这意味着可以有更多的朋友了解WINX,关注WINX了。
这几天陆陆续续有些网友问我的问题,考虑到可能其他朋友有类似的情形,我这里一并说明一下...
阅读全文>
发表于 @ 2006年11月08日 01:19:00|评论(loading...)|编辑
已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3:类P和类Q是类O的派生类,其继承方式如下所示:
class P : protected O {…};
class Q : public O {…};
有甚么办法可以简单地记住这许多的规则? 下文告诉你一个根本不需要记的办法。
阅读全文>
发表于 @ 2006年11月06日 22:56:00|评论(loading...)|编辑
解释了消息分派机制后,接下来我们开始介绍WINX的窗口类。为了产生比较的效果,我决定从之前我写的“SW系统”的窗口类讲起。在你理解了SW系统的窗口类后,我们再来看6年后WINX中的窗口类在设计上发生了什么样的变化。——这自然也是我个人在窗口类观念上的改变。阅读全文>
发表于 @ 2006年11月06日 20:09:00|评论(loading...)|编辑
《应用程序框架设计》是我大学毕业时(2000年)写的毕业论文。在我给公司内部作“应用程序架构”方面的讲座时,曾经作为入门级的参考资料附上。后来不知如何就流传到Internet上,不过是不完整的版本(可尝试在Google中搜索“应用程序框架设计:SW系统”)。回头看这篇文字,最大的感受觉得自己的文字功底是越来越退步了:-) 由于与界面库有关,大家不妨看看。阅读全文>
发表于 @ 2006年11月06日 00:01:00|评论(loading...)|编辑
你已经了解了WINX的消息分派,这里我们总结一下,并交代一些前文为了思路紧凑而略过的一些细节,内容包括:
WINX消息分派的总体特色。
与MFC、WTL相比它有什么优点与劣势。
Default函数是如何实现的。阅读全文>
发表于 @ 2006年11月05日 20:16:00|评论(loading...)|编辑
我们继续Inside WINX's Message Dispatch。现在开始我们进入了最为关键的部分——WINX是怎么进行消息分派的。阅读全文>
发表于 @ 2006年11月05日 18:40:00|评论(loading...)|编辑
和MFC、WTL等界面库不太一样的是,WINX认为消息分派是一个可独立于窗口存在的基础服务。所以WINX中负责消息分派的不是winx::Window类,而是 winx::WindowMessage类。winx::Window只是从winx::WindowMessage继承。阅读全文>
发表于 @ 2006年11月03日 02:18:00|评论(loading...)|编辑
WINX的消息分派是卓越的。我们先简单回顾一下WINX的SDI风格的Hello程序与MFC/WTL/SDK的对比 (我们关注的是窗口类中的消息处理相关)。MFC和WTL有着类似MessageMap(尽管内部机制大不一样),是通过宏实现消息分派的。也许你已经习惯了响应消息时提供MessageMap,但在WINX中这不需要响应任何消息你均只需要直接覆盖消息处理函数即可。示意如下...阅读全文>
发表于 @ 2006年11月03日 02:15:00|评论(loading...)|编辑