CLucene源码剖析(四) 内存管理与调试
内存管理,是程序设计中一个永恒的话题,如何进行内存管理,怎么来进行内存管理?通常,如果一个项目的代码中,有比较多的new/delete或者malloc/free,很多有经验的程序员都会想到用内存池(Memory Pool),来减少内存碎片的产生,提高内存的使用效率。不过今天要讨论的重点不是内存池,今天要讨论的重点是CLucene中是如何进行内存管理的,它是怎么做到方便的内存使用情况的跟踪调试的。 阅读全文…
内存管理,是程序设计中一个永恒的话题,如何进行内存管理,怎么来进行内存管理?通常,如果一个项目的代码中,有比较多的new/delete或者malloc/free,很多有经验的程序员都会想到用内存池(Memory Pool),来减少内存碎片的产生,提高内存的使用效率。不过今天要讨论的重点不是内存池,今天要讨论的重点是CLucene中是如何进行内存管理的,它是怎么做到方便的内存使用情况的跟踪调试的。 阅读全文…
1.CLucene在Sourceforge上的主页:http://clucene.wiki.sourceforge.net/
2.CLucene API文档地址:http://clucene.sourceforge.net/doc/html/index.html
3.CLucene源代码SVN地址:https://clucene.svn.sourceforge.net/svnroot/clucene
在主页上,有关于CLucene的介绍,在API文档中,有相关API使用的说明,SVN地址可以用SVN客户端直接把代码check out下来。有了这些就可以开始学习CLucene了~~
在多线程编程中,程序的线程安全(thread-safe)是十分重要的,要做到这一点,一方面要在程序设计的过程中,尽可能设计多的单线程访问的数据结构,一方面就是合理的使用锁(Mutex)。在CLucene中,实现了如下跨平台的锁相关的宏:
(1) _LUCENE_SLEEP(x) 挂起当前线程 x微秒
(2) _LUCENE_THREADMUTEX 线程锁(mutex)
(3) _LUCENE_CURRTHREADID 获取当前线程的thread ID
(4) _LUCENE_THREADID_TYPE thread ID的类型定义 阅读全文…
命名空间(namespace)是C++中新提出的一个特性,它的好处就是有效地避免了命名的冲突。在C++项目中,灵活地使用命名空间,可以在避免代码命名冲突的基础上,提高代码的可读性。在CLucene中,命名空间可以通过宏来控制,如果定义了DISABLE_NAMESPACE这个宏,那么整个项目就不使用空间,如果没有定义这个宏,那么命名空间的定义便是有效的。
下面是CLucene中关于命名空间的宏的定义: 阅读全文…
近期评论