自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

转载 Google的C++开源代码项目

v8  -  V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎。V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista、Mac OS X 10.5 (L

2014-09-29 16:43:59 790

原创 十八 堆

堆非常适合大量

2014-09-28 10:05:07 515

转载 分布式缓存系统 Memcached(一)——整体架构

分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。什么是Memcached许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏

2014-09-26 22:27:04 756

原创 十七 内存映射文件

几乎应用程序都要使用文件,当这并不容易

2014-09-26 09:47:16 541

原创 十六 线程栈

当系统创建线程

2014-09-26 09:34:07 638

原创 十五 在应用程序中使用虚拟内存

MicrosoftWindows提供一下三种方式对内存进行操作:

2014-09-26 09:11:34 404

转载 Google之BigTable

2006年的OSDI有两篇google的论文,分别是BigTable和Chubby。Chubby是一个分布式锁服务,基于Paxos算法;BigTable是一个用于管理结构化数据的分布式存储系统,构建在GFS、Chubby、SSTable等google技术之上。相当多的google应用使用了BigTable,比如Google Earth和Google Analytics,因此它和GFS、MapRed

2014-09-25 10:18:14 517

原创 十三 Windows内存体系结构

13.1 进程的虚拟地址空间每个进程都有自己的

2014-09-24 20:30:36 540

转载 Hash和Bloom Filter

Hash(函数/表)Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。Hash table(散列表,也叫哈希表),是根据哈希值(Key value)而直接进行访问的数据结构。也就是说,它通过把哈希值映射到表中一个位置来访问记录,以加快查找的速度。下面是一个典

2014-09-23 16:57:13 630

转载 LevelDB源码剖析之TableCache

7.1 TableCache简介TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAndFile是一个拥有2个变量的结构体:RandomAccessFile*和Table*;TableCache类的主要成员变量有:

2014-09-23 15:38:17 958

转载 LevelDB源码剖析之SSTable_sstable文件的读取

6 SSTable之36.5 读取sstable文件6.5.1 类层次Sstable文件的读取逻辑在类Table中,其中涉及到的类还是比较多的,如图6.5-1所示。图6.5-1Table类导出的函数只有3个,先从这三个导出函数开始分析。其中涉及到的类(包括上图中为画出的)都会一一遇到,然后再一一拆解。本节分

2014-09-23 15:36:10 798

转载 LevelDB源码剖析之SSTable_sstable文件的创建

SSTable之26.4 创建sstable文件了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中。6.4.1 TableBuilder类构建sstable文件的类是Tab

2014-09-23 15:32:43 631

转载 LevelDB源码剖析之SSTable_1(Block的创建与读取)

注原文:6 SSTable之1SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。6.1 SSTable的文件组织作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区Data Block,以及各种Meta信息。1)文件中的k/v对是有

2014-09-21 21:43:35 733

转载 LevelDB源码剖析之Log_2

5 操作Log 2 5.3 读日志日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错误。5.3.1 类层次先来看看读取涉及到的类图,如图5.3-1。Reader主要用到了两个接口,一个是汇报错误的Reporter,另一个是log文件读取类SequentialFile。> Reporter的接口只有一个

2014-09-20 22:11:18 575

转载 LevelDB源码剖析之Log_1

5 操作Log 1分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度;2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难。在各种高效的存储系统中,这已经是口水技术了。5.1 格式在

2014-09-20 22:09:44 523

转载 内存映射文件原理探索

原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间 中一块大小相同的区域之间的一一对应,如图1中过程1所示。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,具体到代码

2014-09-20 16:17:22 383

转载 Leveldb整体框架

数据分析与处理之二(Leveldb 实现原理)2011-12-04 21:24 by Haippy, 30699 阅读, 8 评论, 收藏, 编辑LevelDb日知录之一:LevelDb 101  说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Gh

2014-09-20 14:18:18 721

原创 LRUCache初步实现

以hash_map为对象容器,提供快速读取。

2014-09-19 20:46:41 508

转载 LevelDB源码剖析之Memtable(2)

4 Memtable之24.6 Comparator弄清楚了key,接下来就要看看key的使用了,先从Comparator开始分析。首先Comparator是一个抽象类,导出了几个接口。其中Name()和Compare()接口都很明了,另外的两个Find xxx接口都有什么功能呢,直接看程序注释:[cpp] view plaincopy

2014-09-19 09:51:59 726

转载 LevelDB源码剖析之Memtable(1)

http://blog.csdn.net/sparkliang/article/details/86044164 Memtable之1Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。4.1 用途在Leveldb中,所有内存中的KV数据都存储在Memt

2014-09-19 09:49:48 1007

原创 LevelDB源码剖析之Cache(HashTable LRUCache ShardedLRUCache)

Cache为接口类,为实际

2014-09-18 09:41:49 1062

转载 友元函数、友元类、访问私有数据成员、友元关系

http://www.cnblogs.com/JCSU/articles/1044346.html友元函数(friend function)1. 什么是友元函数?    一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员2. 友元函数的用处体现在哪里?    2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成

2014-09-17 12:01:00 506

转载 HashMap实现原理

文章来源于Alpha's学习笔记:http://blog.csdn.net/vking_wang/article/details/14166593HashMap目录(?)[-]HashMap的数据结构数组链表哈希表HashMap的存取实现putgetnull key的存取确定数组indexhashcode tablelength取模table

2014-09-17 09:39:00 446

原创 LevelDB源码剖析之SkipList

SkipList的基本原理及具体实现可参考:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html(此文中SkipList的实现方式是把多层单链表叠加成一个SkipList链表,SkipList的每个节点中包含一个指向下一个Note的指针数组成员)。如图1:                         

2014-09-16 10:57:02 953

原创 Boost开发指南

第二章:计时器timer库  和日期时间库 date_time第三章:资源管理 ——智能指针(原始指针的代理类)smart_ptr库基本思想:用对象管理资源  RALL机制C++标准库中的auto_ptr:复制使用权转移(不支持引用计数) 不能用作STL容器元素Boost的smart_ptr库:(6个指针代理类)1、scoped_ptr:与auto_ptr类似,不能复制或者赋值

2014-09-10 16:57:00 974

原创 二 内存分配

内存基本处理工具:STL定义了五个全局函数,作用于未初始化空间上。这在容器的实现上很有帮助。Construct():用于构造Destroy():用于析构Uninitialized_copy():POD:直接用STL算法copy();non_POD:单个元素构造construct().对char*类型元素,直接内存底层操作快速移动:memmove()效率极高Uninitializ

2014-09-10 16:53:57 462

原创 八 配接器

第八章:配接器配接器都是仿函数,把被配接的对象经过改变接口以适合某种需要而来。为了方便使用,一般都为每个配接器仿函数提供一个辅助函数,以供外界调用。8.1、配接器分类:   Functionadapter:改变仿函数接口Contianer adaper:改变容器接口:如 queue  stackItearor adapter:改变迭代器接口: 1、Itearor ada

2014-09-10 16:49:52 525

原创 七 仿函数 functors

第七章:仿函数  functors1、STL算法接受一个函数指针或者仿函数对象作为其一个参数。但是普通函数指针不具备可配接能力。2、STL仿函数分类:按操作数个数分为 一元仿函数、二元仿函数。(STL不支持三元仿函数)。按功能:可分为 算术运算、关系运算、逻辑运算。   要使用STL的内建仿函数,需含.3、为了使仿函数具有可配接能力,每个仿函数需要定义自己的相应型别,如同迭代器

2014-09-10 16:47:46 548

原创 六 算法

第六章:算法for_each():为非质变算法,即不能通过该算法改变元素的值。 Lower_bound():在有序区间查找不小于value值得最小位置。返回迭代器Upper_bound():在有序区间查找不大于value值的最大位置。返回迭代器Binary_search():在有序区间查找不小于value值得最小位置。返回bool值:其内部调用lower_bound(),在查看

2014-09-10 16:45:28 370

原创 五 关联式容器 associative containers

第五章: 关联式容器 associative containers1、标准STL的关联容器: set  multiset(多键集合)   map(映射表)  multimap(多键映射表)这些容器的底层机制都是RB_Tree(红黑树)完成。RB_Tree也是一个独立容器,但不开放给外界使用。2、此外,SGI STL还提供了一些关联容器:hashtable(散列表,已引入C++1

2014-09-10 16:42:34 813

原创 四 序列容器

第四章:序列容器1、序列容器:其中的元素都可有序,但未必有序。2、C++语言本身内置了序列容器:array。STL提供的序列容器:vector  list deque,stack,queue,priority_queue. 其中stack queue只是对deque的包装,技术上称为配接器。 4.2、Vector:1、实现的关键技术在于:对其大小的控制以及重新配置时

2014-09-10 16:39:38 408

原创 三 迭代器(iterator)概念与traits编程技法

第三章 迭代器(iterator)概念与traits编程技法设计模式中,iterator模式的定义: 提供一种方法,使之能偶依序巡访聚合物(容器)的所含各个元素,而又无需暴露该聚合物的内部表达式。每一种STL容器都提供有专属迭代器。1、如何获取  迭代器相应型别(五种) 如:迭代器所指对象的型别(可用 模板函数的参数推导机制获取),而更加全面的解法  Traits编

2014-09-10 16:37:19 717

原创 一 STL概论与版本简介

STL 源码剖析   苞丁解牛,恢恢乎游刃有余第一章 STL概论与版本简介1.9.2 临时对象的产生与应用1、刻意产生临时对象:在型别名称后直接加一对小括号,并指定初值,如 shape(3,5)或 int(8);,调用相应的constructor且不指定对象的名称。及创建匿名临时对象。在STL中此技巧常用于仿函数与算法的搭配上。2、静态常数整数(static const i

2014-09-10 16:36:07 433

转载 POD数据类型

POD全称Plain Old Data——数据类型满足了”平凡的定义“和”标准布局“通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。平凡的定义:1.有平凡的构造函数2.有平凡的拷贝构造函数3.有平凡的移动构造函数4.有平凡的拷贝赋值运算符5.有平凡的移动赋值运算符6.有平凡的析构函数7.不能包含虚函数8.不能包含

2014-09-10 16:32:38 935

转载 C++常用关键字(C++11更新)

C++常用关键字(C++11更新) typeid:获取表达式的类型,以std::type_info(类)表示结果,可能抛出std::bad_typeid。当操作数非多态类(引用)类型在编译时即可确定结果,否则需要在运行时取得结果,即RTTI。const std::type_info&ff=typeid(ee);//typeid:Theresult of a typeid express

2014-09-10 16:26:27 482

原创 C++新型类型转换

1.const_cast: 形式const_cast(expression),用来修改类型的const或volatile属性,除了const或volatile修饰以外,type与expression类型一样。它主要用于移除const2.static_cast:形式static_cast ( expression ),将expression转换为type类型。  没有运行时类型检查来保证转换的安

2014-09-10 16:21:39 471

原创 构造函数与初始化列表

构造函数与初始化列表: 构造函数的执行分为两步:成员初始化和一般计算(即构造函数体的语句)。对于类中的数据成员不放在初始化列表中,则会在执行构造函数体之前默认初始化;在初始化列表中的成员则在初始化列表中初始化,然后在执行函数体(第二步即一般计算)。因此在初始化列表中是初始化,即直接调用成员的构造函数构造成员;而在构造函数体内则是赋值,即覆盖之前默认的初始化值。这对于比较复杂的数据类型有

2014-09-10 16:20:37 467

原创 重载 覆盖 隐藏

重载、覆盖与隐藏1).重载:成员函重载、覆盖与隐藏1).重载:成员函数具有以下的特征时发生"重载"A.相同的范围(同一个类中)B.函数的名字相同C.参数类型不同(不能进行隐式类型转换)D.Virtual关键字可有可无2).覆盖(也叫"继承"):指派生类函数覆盖基类函数,特征是:A.不同的范围(分别位于基类与派生类中)B.函数名字相同C.参数相同D.基

2014-09-10 16:18:57 402

原创 第四章:function 语意学

第四章:function 语意学1、与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数和静态数据成员1)静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数; 2)非静态成员函数可以任意地访问静态成员函数和静态数据成员; 

2014-09-10 15:14:50 376

原创 第三章:Data语意学(The Semantices ofData)

第三章:Data语意学(The Semantices ofData)1、Data绑定:Class的data绑定发生在整个Class声明完(右大括号出现)。因此当data member 与全局data同名时,会选择绑定到data member。2、data member 的布局layout: class 中nonstatic datamembers 的声明顺序与其在class object

2014-09-10 14:42:33 450

空空如也

空空如也

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

TA关注的人

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