C/C++语言
文章平均质量分 69
sparkliang
新版CSDN,查看&批准好友申请的地方在哪呢?
展开
-
C++的new
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2008-12-30 18:54:00 · 8198 阅读 · 2 评论 -
CRC32算法详细推导(1)
<br />CRC算法详解(1)<br />作为blog再次发出来,详细描述一下CRC32算法的推导过程。CRC算法的数学基础<br />CRC算法的数学基础就不再多啰嗦了,到处都是,简单提一下。它是以GF(2)多项式算术为数学基础的,GF(2)多项式中只有一个变量x,其系数也只有0和1,比如:<br /> 1*x^6 + 0*x^5 + 1*x^4 + 0*x^3 + 0*x^2 +1*x^1 + 1*x^0<br /> =x^6 + x^4 + x + 1<br />加原创 2010-06-14 23:55:00 · 60590 阅读 · 7 评论 -
CRC32算法详细推导(2)
<br />CRC算法详解(2)<br />初见Table-Driven<br /> <br />变换到上面的方法后,我们离table-driven的方法只有一步之遥了,我们知道一个字节能表示的正整数范围是0~255,步骤1中的计算就是针对reg的高Byte位进行的,于是可以被提取出来,预先计算并存储到一个有256项的表中,于是下面的算法就出炉了,这个和上面的算法本质上并没有什么区别。<br />#define POLY 0x04C11DB7L // CRC32生成多项式static unsigned原创 2010-06-15 11:13:00 · 6979 阅读 · 5 评论 -
一个C语言的惨痛教训
一个c语言动态库开发的惨痛教训,作为警示,希望大家不要碰到这类问题。背景交代下背景,最近的一个项目,apache module开发,使用的是c语言。这个其实比较无奈,apache mod_dav.h中声明的dav_error结构体,其中一个字段就是const char *namespace,这不是鄙视C++吗?虽然有方法可以绕过,搞成C++的,最后还是决定用c语言开发。悲剧原创 2011-11-30 09:58:42 · 5322 阅读 · 2 评论 -
apache mod_dav框架的dav_hooks_propdb结构真的烂透了
apache的mod dav框架,其他说来还行,但是对于dead properties的dav_hooks_propdb结构真的烂透了。摘取做更新、删除操作的几个hook函数:dav_error * remove(...)dav_error * store(...)dav_error * get_rollback(...)dav_error * apply_rollback原创 2011-12-02 17:38:23 · 2385 阅读 · 0 评论 -
规模是个大问题
一旦系统达到了一定的规模,很多看起来本该不是问题的问题也会一个一个接连跳出来。而更麻烦的是这些问题在刚开始可能根本就没有被考虑过。特别是分布式集群系统。前面提到过系统透明度的问题,这是其中一个,另一个密切相关的就是系统日志的存储与查询问题。小规模集群的情况下,使用一个单主机可能就够了。大规模用户的情况下,系统产生的日志可能会把系统淹没掉。仅仅是那些必须记录的重要性日志,其产原创 2012-02-15 10:26:23 · 2806 阅读 · 2 评论 -
moosefs分布式文件系统实施配置方案
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zyw1209.blog.51cto.com/1266169/580272 基于linux下分布式文件系统方案 前言:现在有大量的企业采用共享存储服务器NFS的方式,来对应用数据进行网络存储,但这存在性能瓶颈和单点故障的问题,于是分布式文件存储管理系转载 2012-05-23 16:48:40 · 4777 阅读 · 1 评论 -
Leveldb源码分析--8
6 SSTable之26.4 创建sstable文件了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中。6.4.1 TableBuilder类构建sstable文件的类是TableBuil原创 2013-03-09 11:48:36 · 10099 阅读 · 2 评论 -
Leveldb源码分析--10
6 SSTable之46.6 遍历Table6.6.1 遍历接口Table导出了一个返回Iterator的接口,通过Iterator对象,调用者就可以遍历Table的内容,它简单的返回了一个TwoLevelIterator对象。见函数实现:Iterator* NewIterator(const ReadOptions&options) const;{ return NewTwoLevel原创 2013-03-23 09:28:33 · 8555 阅读 · 0 评论 -
Leveldb源码分析--18
11 VersionSet分析之1Version之后就是VersionSet,它并不是Version的简单集合,还肩负了不少的处理逻辑。这里的分析不涉及到compaction相关的部分,这部分会单独分析。包括log等各种编号计数器,compaction点的管理等等。11.1 VersionSet接口1 首先是构造函数,VersionSet会使用到TableCache,这个是调用者传入的。Table原创 2013-06-03 10:52:20 · 9580 阅读 · 0 评论 -
Leveldb源码分析--20
12 DB的打开先分析LevelDB是如何打开db的,万物始于创建。在打开流程中有几个辅助函数:DBImpl(),DBImpl::Recover, DBImpl::DeleteObsoleteFiles, DBImpl::RecoverLogFile, DBImpl::MaybeScheduleCompaction。12.1 DB::Open()打开一个db,进行PUT、GET操作,就是前面的静态原创 2013-07-12 15:03:32 · 11560 阅读 · 2 评论 -
Leveldb源码分析--22
14 DB的查询与遍历之214.4 DBIterLeveldb数据库的MemTable和sstable文件的存储格式都是(user key, seq, type) => uservalue。DBIter把同一个userkey在DB中的多条记录合并为一条,综合考虑了userkey的序号、删除标记、和写覆盖等等因素。从前面函数NewIterator的代码还能看到,DBIter内部使用了MergingI原创 2013-11-26 18:01:53 · 12520 阅读 · 7 评论 -
个人数据搜索
有时间再仔细讲讲。原创 2014-10-24 14:11:48 · 6041 阅读 · 0 评论 -
设计模式之策略模式
设计模式之策略模式<br /> 策略模式的定义<br />先来看看什么是策略模式:<br />定义和封装一个算法家族,并使这个家族种的各个算法可以相互替换,以使得算法可以独立于使用它的客户端而演变。UML如下所示。<br />这里的算法属于同一个算法家族,比如都是一组寻路算法,但是策略各有不同,有A-star,有简单寻路等等。<br />需求实例及初步设计<br />现在有一组需求,设计和展现坦克、榴弹炮、自行火炮等武器。它们都是装甲车辆,具有很多相同点,很自然我们会设计一个装甲车基类,并让原创 2010-06-06 20:39:00 · 2572 阅读 · 0 评论 -
字符串分割函数
<br />最近与字符串打交道相对多些,C++最痛苦的地方就是对字符串的操作太麻烦了,繁琐。<br /> <br />很多时候都会需要一个字符串分割函数,还可能是把诸如 “key1=value1 & key2=value2”形式的字符串分割称key/value对。<br />一直没找到合适的函数,干脆自己造一个。<br /> <br />函数如下,功能就是将“key1=value1 & key2=value2”形式的字符串分割称key/value对,<br />比如字符串“key1=value1 & key原创 2010-06-07 23:43:00 · 4973 阅读 · 5 评论 -
面试时的那点事
面试时的那点事 算来毕业也将近两年了,从刚回写程序开始,面试过的公司是屈指可数,难说算坏算好啊。主席老人家说过要在战斗中壮大自己,看来我历练的还远远不够,不过在有限的斗争中,也总结了些许,与大家共勉之。 说来有些问题太过于tricky,如果过分沉浸在这些奇巧淫技里,反倒害了自己,不如把精力投入到更有效的地方。偏偏还能碰到有些人就喜欢追究这类问题,就像孔乙己一样因为知道回字的原创 2010-05-12 22:15:00 · 5084 阅读 · 6 评论 -
C++中的delete—— C++中的new之姊妹篇
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2008-12-31 19:56:00 · 2285 阅读 · 0 评论 -
针对特定对象的内存管理类
内存池下午花时间写了一个内存管理的类,每次分配一个固定大小的对象,基本的处理原则就是下面的4点:1. 动态增长,尽量使用连续内存2. 分配内存地址的不变性3. 快速分配和回收4. 便于管理也贴出来现现丑,代码如下: #ifndef __C_POOL_MANAGER_H_#define __C_POOL_MANAGER_H_ // // a gener原创 2009-03-28 15:32:00 · 1803 阅读 · 1 评论 -
Build Kerberos on windows
前几天由于项目需要,要在Windows上编译kerberos库,在blog上把步骤写下来; 前提需要一个porting到windows上的linux实用程序库,需要的是: sed, gawk, cat, cp。 首先需要按照下面的步骤设置编译环境:然后按照kerberos的说明编译就行了:1) cd xxx/src原创 2009-07-17 14:06:00 · 2193 阅读 · 0 评论 -
函数指针详解
这篇文章把函数指针的各种常用情况做了一个详解的总结。 1. 指向普通函数的指针 很简单,如下的例子可以说明基本格式和用法:int int_add(int a, int b){ return (a+b);}int int_sub(int a, int b){ return (a-b);}int (*int_operato原创 2009-06-09 11:06:00 · 9789 阅读 · 5 评论 -
求1的个数问题
《编程之美》中有一个求1出现次数的问题,给定一个十进制正整数N,写下从1到N的所有正整数,然后数一下其中1出现的次数;如果将这个问题稍微改变一下,要求数一下其中含有1的数字的个数;比如N=12,f(N)=4,(1, 10, 11, 12) 看起来问题基本一样,但实际上两者还是有很大的不同的,改变后的问题应该说是一个排列组合问题; 这里给出一种解法:首先现将问题转化为原创 2009-08-18 17:21:00 · 2201 阅读 · 0 评论 -
VC预编译代码文件
预编译代码文件是编译器进行了去注视、头文件包含和宏替换后的源代码文件,后缀为.i;它有助于查看宏替换后的程序代码,分析程序代码错误;在VC中只需在C/C++-->Command Line中追加上/P命令参数就可以了; 这样Compile某个.cpp文件后,就能生成对应的预编译文件了。原创 2009-11-02 11:04:00 · 3369 阅读 · 0 评论 -
KMP算法真的很简单1
spark 11.9999 Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4原创 2010-02-03 12:49:00 · 10807 阅读 · 14 评论 -
libevent源码深度剖析十三——libevent信号处理注意点
libevent源码深度剖析十三——libevent信号处理注意点前面讲到了libevent实现多线程的方法,然而在多线程的环境中注册信号事件,还是有一些情况需要小心处理,那就是不能在多个libevent实例上注册信号事件。依然冠名追加到libevent系列。 以2个线程为例,做简单的场原创 2010-02-11 20:00:00 · 19021 阅读 · 14 评论 -
Inside CRT: Debug Heap Management
转一篇好文,关于VC CRT Debug状态下的Heap管理;你将理解内存地址值为0xCC,0xCD,0xDD,0xFD到底代表着什么,e文的。Inside CRT: Debug Heap ManagementWhen you compile a debug build of your program with Visual Studio and转载 2010-02-26 20:41:00 · 2560 阅读 · 0 评论 -
DLL导出类的问题
转载一篇讨论有关DLL的导出类的文章转载地址:http://hi.baidu.com/zhuangzi200323/blog/item/7c8982318b359fae5fdf0e6d.htmlDLL导出类的问题DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向转载 2010-02-26 13:08:00 · 3424 阅读 · 1 评论 -
开源网络框架HPServer0.2.10版发布
HPServer是一个为并发高性能网络服务应用而开发的,轻量级的开源网络框架,以C++作为开发语言。HPServer的一些特性: 采用事件驱动的机制,并且统一支持I/O事件、定时器事件和Signal事件; 支持精度为ms的定时器; 内建支持Acceptor,Connector组件,方便程序设计; 支持多线程(但不是线程安全的); 跨平台,目前H原创 2010-03-05 18:12:00 · 7785 阅读 · 15 评论 -
C/C++语言实现动态数组
C/C++语言实现动态数组C数组的小问题 这里说的动态数组是可以根据需要动态增长占用内存的数组,比如程序初始分配了100个元素,可是运行了一段时间后区区100个空间不能满足了,现在需要400个,怎么办呢;那肯定需要再额外分配300个。 C语言有realloc()函数来解决空间扩充的问题,但是不要忘了realloc可能会迁移内存,很多时候数组中的元素会被其它函数/模块原创 2010-03-09 12:29:00 · 15444 阅读 · 22 评论 -
Memory Reordering Caught in Act
前言: 首先是翻译的几篇文章,作者是一个老外,虽然文章是几年前的,但是很值得一读。 最近不知道写些什么东西,拿这个先凑几篇其次有关什么memory ordering,memory reordering,memory model这些名词,可能很多时候直接e文,没有翻译,个人习惯。Memory Reording Caught in Act原文在这里:http://preshing.com/20120翻译 2016-10-19 15:13:17 · 3749 阅读 · 0 评论