存档

文章标签 ‘源码’

CLucene源码剖析(四) 内存管理与调试

2009年5月30日 4 条评论

内存管理,是程序设计中一个永恒的话题,如何进行内存管理,怎么来进行内存管理?通常,如果一个项目的代码中,有比较多的new/delete或者malloc/free,很多有经验的程序员都会想到用内存池(Memory Pool),来减少内存碎片的产生,提高内存的使用效率。不过今天要讨论的重点不是内存池,今天要讨论的重点是CLucene中是如何进行内存管理的,它是怎么做到方便的内存使用情况的跟踪调试的。 阅读全文…

CLucene源码剖析(三) 实现跨平台的线程安全

2009年5月29日 没有评论

在多线程编程中,程序的线程安全(thread-safe)是十分重要的,要做到这一点,一方面要在程序设计的过程中,尽可能设计多的单线程访问的数据结构,一方面就是合理的使用锁(Mutex)。在CLucene中,实现了如下跨平台的锁相关的宏:
(1) _LUCENE_SLEEP(x) 挂起当前线程 x微秒
(2) _LUCENE_THREADMUTEX 线程锁(mutex)
(3) _LUCENE_CURRTHREADID 获取当前线程的thread ID
(4) _LUCENE_THREADID_TYPE thread ID的类型定义 阅读全文…

CLucene源码剖析(二) 命名空间的灵活使用

2009年5月29日 没有评论

命名空间(namespace)是C++中新提出的一个特性,它的好处就是有效地避免了命名的冲突。在C++项目中,灵活地使用命名空间,可以在避免代码命名冲突的基础上,提高代码的可读性。在CLucene中,命名空间可以通过宏来控制,如果定义了DISABLE_NAMESPACE这个宏,那么整个项目就不使用空间,如果没有定义这个宏,那么命名空间的定义便是有效的。
下面是CLucene中关于命名空间的宏的定义: 阅读全文…

CLucene源码剖析(一) 调试信息的输出

2009年5月27日 3 条评论

在写比较大型的项目的时候,如何使程序的调试信息能更加方便,优雅的显示出来,也是一件比较好玩的事。最好的效果就是,我在写程序的时候,调试信息越详细越好,而我写完程序,调试完成后,不用再去注释大篇的调试信息,能通过一个较小的改动就把程序中的调试信息去掉,这样就会避免应注释而可能引入新的bug,同时也节省了体力呀! 阅读全文…