自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(17)
  • 资源 (4)
  • 收藏
  • 关注

原创 《STL 源码剖析》之剖析stl_tree的一点补充

 C语言程序员的困惑--const、referenc、pointer混合使用:     先看下面的方法:     __rb_tree_rotate_left(__rb_tree_node_base* x, __rb_tree_node_base*& root)参数类型 "__rb_tree_node_base*&" 表示什么意思呢?它表示RB_tree节点指针的引用,如果在方法中修改了指针root

2007-10-27 15:29:00 1645

原创 关于用宏定义的foreach和foreach_safe接口

        现在也记不清楚是什么时候第一次接触foreach和foreach_safe接口了,只记得当时的感觉就是有点莫名其妙。其实这样的接口太普遍了,只要是常在开源代码打滚的人都会对这接口说一句“我们一直都这样做”。但总有刚接触的人可能会犯错。   今天用valgrind查了一个BUG,是关于foreach和foreach_safe接口错用引起的。其实接口的意思很简单,当只是普通遍历元素时它

2007-10-15 20:48:00 1353

原创 用模板机制实现模式--工厂模式实例作导向分析

  看完《STL源码剖析》所描述的Sequence容器,觉得容易让人忽略的但又是很重要的一个思想是:使用模板机制来实现iterator模式。这思想与其说是用模板机制实现iterator模式,还不如说是用模板机制实现模式,更应说是模板机制和面向对象思想可以成为绝配--面向对象思想和泛型思维的溶合。面向对象思想和泛型思维的结合使用,更具体点是模板机制和模式的结合使用或许早就被高手们"大肆"使用,但

2007-10-14 19:04:00 929 1

原创 STL中序列容器、iterator相关的架构

在看stl相关的构架时,有几个泛形编程的概念是需要注意的:Concepts、Models、Lifting。一种简单的理解方式是把concept看成是面向对象的类,把models看成是继承或实例化,lifting相当于是一种抽象方法与models刚好相反。STL中的iterator的实现,代码中没有基类,但概念上是存在基类的。每种iterator都是一个concept,它们形成了概念上的继承关系

2007-10-13 20:13:00 872

原创 vector中resize和reserve接口的异同

    初次接触这两个接口也许会混淆,其实接口的命名就是对功能的绝佳描述,resize就是重新分配大小,reserve就是预留一定的空间。这两个接口即存在差别,也有共同点。下面就它们的细节进行分析。     为实现resize的语义,resize接口做了两个保证:            一是保证区间[0, new_size)范围内数据有效,如果下标index在此区间内,vector[indext]

2007-10-05 20:28:00 786

原创 有感于auto_ptr背后的一个思想----RAII

       auto_ptr的一个重要思想是RAII.RAII是"Resource Acquisition Is Initialisation"的简称,有人把它翻译成"资源获取即初始化",但我更喜欢用理解的方式把RAII看成是利用对象的生命周期管理资源。RAII思想不只是局限于C++语言,但毫无疑问它跟C++是绝配。        RAII这一思想,特别是运用在C++语言上,不仅实用、简单,而且

2007-10-04 19:43:00 967

原创 插件设计的简单源代码实例

   跟策略模式有很多相同点的插件设计作为一种框架设计方法,应用之广决不亚于其它常用的设计方法。Linux Module机制,eclips的框架,directfb中的部分框架等等都相应地用到了插件设计。我在项目中也用过插件设计,不过这些都过于庞大,不利于源代码的学习。为了方便传授于后闻道者,这里给出一个插件设计的简单实例并附源代码,其中的一些代码摘自directfb。整体框架图很简单,它跟

2007-09-23 13:17:00 925

原创 type traits 之"本质论"

   侯捷老师在《STL 源码剖析》说:traits编程方法是一把开启STL源代码大门的钥匙,其重要性也就不必再说了。既然traits编程方法如此重要,那么掌握并领悟其精髓是相当必要了。    trait的意思是什么?英文意思是attribute,feature等等,中文意思可以解释为特点, 特性。那么type trait就是类型的特性。那什么是类型?类型的特性又有哪些呢?类型也即是用户自

2007-09-15 20:53:00 5318

原创 《STL 源码剖析》之剖析内存的一点补充

   内存就好像稀缺资源,永远也没法满足需求,只能对其进行高效而合理的配置和使用。要用好内存好的管理方法必不可少,现在比较广泛的方法是内存池。不同的内存池管理方法的实现各有其特点,SGI allocator分配器也不例外。SGI分配器没有适时调用原始的free释放一些blocks,侯捷老师对此说法是“这是 SGI allocator 值得加强的部分”。但是现有SGI分配器代码对此能不能加强?有

2007-09-09 00:13:00 1197

原创 分析简单的线性只读文件系统romfs

   romfs是我见过的最简单的文件系统了,它不仅是线性的,而且还是只读的,但romfs的使用却相当的广泛。可以到网站http://romfs.sourceforge.net/下载工具genromfs,用此工具生成romfs的映像,方便分析。用于分析的文件和目录如下:[~ rom]$ ls romfssub_dir top_f1.txt top_f2.txt[~ rom]$

2007-09-05 21:01:00 1393

原创 C语言模拟C++的异常机制

   也许很多人会问C语言能实现类似C++那样的异常处理吗?这就像问用C语言能写出面向对象的代码吗?对它们的回答都是肯定的。C++之父在《The C++ Programing language》(简称TCPL)描述C++的异常有句话的意思大致是这样的:C程序员可以把C++的异常处理看作是setjmp/longjmp的替代品。可见setjmp/longjmp是C语言提供的一种异常处理机制。要理解

2007-09-01 22:28:00 1661

原创 glib库线程池代码分析续

         Glib-2.12.9中的线程池可以把它看作一个类,进程可以通过这个类创建多个线程池对象。每个线程池对象所创建的线程可以以私有方式使用,也可以以共享方式使用。私有方式是指具体某个线程池对象所创建管理的线程只能是它自己使用,同一进程的其它线程池对象则无权过问。共享方式,顾名思义就是指同一进程的所有线程池对象创建的线程以共享的方式使用,这也正是本文要分析的。关于私有方式的代码分析

2007-08-18 21:12:00 3618

原创 似有误的一道谷歌试题分析--高效删除单链表节点

   斜体字内容是来自小兵的http://blog.csdn.net/wplxb/archive/2007/08/11/1737964.aspx。题目:单向链表的删除操作,已知 head, p(指向被删除元素),要求复杂度为 O(1) (题目似有误)常数时间删除结点肯定不行,不过可以用假删除,就是把要删除节点的值用要删除节点的下一个节点值覆盖,然后删除下一个节点 (要求该节点的下一

2007-08-16 19:56:00 1824

原创 比slab更适合多CPU/多线程的magazine内存管理源代码分析

        本文是对glib-2.12.9的gslice.c实现的mgazine内存管理机制代码的分析。在研读magazine内存管理相关代码前,最好是先熟悉实现slab相关的代码,因为magazine是以slab为基础的。我上一次写了一篇关于slab代码分析的文章,因此在这里涉及到slab相关的内容都可以参考那篇文章的分析。关于magazine原理的英文资料可以到代码作者提供的网站获取更多相

2007-08-11 17:27:00 3258

原创 slab内存管理源代码分析

        学习计算机原理,最好是实践或看高手写的源代码,在一定程度上就不再会感到原理的抽象。关于slab一些原理资料,可以在这里下载或到网站有更多的信息和资料。Slab内存管理机制已被广泛使用,要找到使用slab管理内存的开源代码也不难,如一些OS内核中的内存管理。既然要分析理解slab,最好还是选择复杂度和代码量都不要太大的,在这里我选取了glib-2.12.9的gslice.c实现的sl

2007-08-04 11:38:00 4101

原创 linux kernel中的免锁算法

           在《LINUX设备驱动程序》(第三版)有几页对免锁算法的实现进行了分析。对于作者的分析有两点我想在这里作更加细致的说明。一是作者对循环缓冲的分析,当缓冲区满时分析错了;二是作者没有对里面的实现技巧作详细的介绍。针对以上两点,本文就用2.6.11(2.6.10和2.6.11是一样的)的kfifo.h和kfifo.c代码实现的免锁算法进行较为详细的分析。        对

2007-07-27 19:31:00 3287 2

原创 glib库线程池代码分析

    本文章主要讲了两部分内容:一是分析了异步队列的原理和实现,二是分析线程池的原理和实现。在多线程程序的运行中,如果经常地创建和销毁执行过程相似而所用数据不同的线程,系统的效率,系统资源的利用率将会受到极大的影响。对于这一问题可用类似glib库中的线程池的解决办法。   我们可以这样想像线程池的处理,当有新的数据要交给线程处理时,主程序/主线程 就从线程池中找到一个未被使用

2007-07-22 00:03:00 5318 5

服务器客户端通信代码

过年整理编写的服务器客户端通信代码,只是一个框架性的代码。

2011-02-09

plug插件设计实例

一个简单的插件设计源代码实例

2007-09-22

magazine

比slab更适合多CPU/多线程的内存管理英文资料

2007-08-11

slab原理英文资料

slab原理英文资料

2007-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除