在上一篇博文里,我介绍了代理类的相关内容,如果记性好的朋友,应该已经对代理类有了比较深入的认识。在设计代理类的过程中,我们遇到的核心问题是:内存的分配和编译时类型未知对象的绑定。我们通过让所有子类自定义一个 copy 函数,来返回自身的复制,这种方式来解决需要我们自己来管理内存的繁琐,又通过定义代理类绑定子类的类型,通过一个基类指针来保存子类这种方式来实现运行时绑定。
但对代码的追求是永无止尽的,虽然代理类解决了我们的需求,但是对一些苛刻的程序员来说,复制对象这种行为是让人无法忍受的,在一个理想的程序世界里,任何事物如果是指代相同的内容,那么就应该只保存一份(好吧,这是我自己的理想世界)。难道就真的没有一种方法,能够让我们不去复制对象来实现运行时绑定吗?答案是肯定的。
在《C++ 沉思录》中作者介绍了一个耳熟能详的名字——句柄。
石潭位于安徽歙县境内,三月底油菜花都开了,确实很漂亮和婺源有的一比,约上朋友和浙大户外一起跟团去了石潭,一天时间早上七点半到晚上七点。
leveldb在写操作的时候首先会将数据写到log文件中,同时每次写之前也不会直接写入,leveldb会将写操作作为一个批量操作,最后统一一次性写入日志文件中。其中会涉及到一个leveldb的一个写批量操作的类WriteBatch,该类会将所有操作打包成一个批处理统一会写到文件中。
在搜索和存储里面为了更省空间,对整型数字都采取变长压缩,大部分数字其实值都很小,如果使用变长字节来表示,就会有很大压缩空间,levelDB和lucene内部变长整型是如何做的呢?