随笔分类 - C++
关于C++的一切。
摘要:之前一直把代码托管在taocode上,现在已经不能用了,所以把代码整理了一下,统一都放在gibhub上了。 LALR(1)语法分析生成器:https://github.com/kiven-li/xbytes 红黑树:https://github.com/kiven-li/rbtree AVL树:ht
阅读全文
摘要:概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情。强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到。下面是整理的一些我认为会比较有帮助的部分。下文中以">"开头的命令是linux的shell命令,以"(...
阅读全文
摘要:0.概述: 看了编译器龙书和虎书后,自己手动写了一个LALR(1)语法分析生成器,使用的语法文件格式和lemon的差不多。 程序里面很多的算法也都是摘录自虎书,龙书虽然讲的很详细,但是真正动手写的时候还是虎书上面的算法给力点。程序相对来说比较简单,没有做任何优化,如果看过虎书和龙书,看懂代码难度不大
阅读全文
摘要:最近看《游戏脚本高级编程》,然后顺便把里面实现的虚拟机,汇编器以及编译器手动用C++重写了一遍,原版书中提供的代码,风格不是很好,而且有几处BUG。我现在开源的代码中已经修复了BUG,而且有些地方做了一些改进。 这本书对我的帮助很大,虽然作者比较啰嗦,代码风格也不是很好,但是作者写的很简单明了...
阅读全文
摘要:今天在看《Distributed Systems Concepts and Design》这本书的时候,在讲到分布式系统的安全性的时候,给出了TEA算法,书本上有现成的代码,所以摘录下来以备后用。下面摘自百度百科的简短介绍: TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明[3]。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。 加密算法代码如下: 1 void encrypt...
阅读全文
摘要:TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多。TCMalloc是google-perftools工具中的一个,这个工具都是开源的,以源码形式发布。如果觉得自己维护一个内存分配器麻烦的话,可以考虑将TCMalloc静态库连接到你的程序中。使用的时候和glibc中的malloc调用方式一样一样的。你需要做的只是把TCMalloc的动态库或者静态库连接进你的程序中,你就可以获得一个高效,快速,安全的内存分配器。好了废话不多说,如果想知道更多关于TCMalloc的信息,看..
阅读全文
摘要:boost库很强大,我用的比较多的库就是boost::shared_ptr、boost::asio等。现在我写的页游服务器中大量使用了boost中的类和方法,但是由于系统本身自带的boost版本比较老,所以需要自己手动编译最新版本的boost。具体步骤如下:(在这里我们以boost1.53版本为例) (1).到boost官网http://www.boost.org/下载最新版本的boost源码包,具体地址http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.zip/download。 (2).进入到下...
阅读全文
摘要:B树是一种多路平衡树,我根据《算法导论》中的算法描述实现了C++版本的BTree。关于BTree的各种属性看这里吧,还有别人的实现版本,看这里。我记得书中并没有给出删除的算法,这个部分我是根据书中的描述自己实现的。完成后自己进行过简单的测试,好像没有什么问题。总共是两个文件BTree.h和Test.cpp,BTree的实现在BTree.h文件中。Test.cpp是测试案例。具体代码如下: 1 #ifndef __BTREE_H__ 2 #define __BTREE_H__ 3 4 #include <iostream> 5 6 typedef struct _tagBT...
阅读全文
摘要:在我做的第一个页游项目中,服务器使用了插件的机制,但是当时的插件都是用C#写,而且如何实现的也不是很清楚。之后的几个页游项目都是自己一个人包揽服务器部分,所以一直没有写插件的需求。下一个页游项目服务器这边需要多人合作,因此我想把其他模块都独立的做成插件的模式,目前也是在探索阶段。通过网上资料查找以及自己的整理,实现了一个简单版本的插件机制。实现代码如下: 文件Object.hpp中实现了所有插件类的基类,所有插件都要继承该类。 1 #ifndef __OBJECT_HPP__ 2 #define __OBJECT_HPP__ 3 4 class Object 5...
阅读全文
摘要:第1章 用于网络编程的面向对象框架1.1 面向对象框架综述:机会主义复用:把有用的代码复制到自己的程序中。系统化复用:创建并应用多用途的软件架构、模式、框架和组件。1.2 比较各种软件开发和复用技术: 1.2.1 比较框架和类库:框架和类库在实践的应用中时互补的技术。框架给程序提供基础性的结构。但框架聚焦于特定领域,不能满足最广泛的应用需求,因此在框架的应用中结合类库。 1.2.2 比较框架和组件:框架和组件之间的关系是高度协作的,谁也不从属于谁。 1.2.3 比较框架和模式: 1.2.4 比较框架和模型集成式计算:1.3 将框架应用到网络编程:1.4 周游ACE框架:1.5 实例:网络化日志
阅读全文
摘要:第0章 设计课题、中间件方案、ACE为了降低耦合性,降低复杂度,提高复用性,ACE设计成了层次化体系结构。ACE被设计为两层:ACE OS Adaptation层和C++ Wrapper Facades。(1).ACE OS Adaptation层:封装了原始的基于C的OS API,隐藏了和平台相关的细节。展示了统一的OS机制接口,供高级的ACE层使用。(2).ACE C++ Wrapper Facades层:将OS Adaptation层提供的功能用C++类来进行封装。方便使用者调用。(3).ACE Framework层:扩充了ACE C++ Wrapper Facades类,用高级的并发和
阅读全文
摘要:一、计算机加法的实现:(1).一位二进制加法首先给出一位二进制加法的真值表,然后我们通过分析真值表来得出如果进行二进制加法的规则。一位二进制加法真值表:(对应于硬件中的半加器)xysumcarry0000011010101101分析上面一位二进制加法的真值表,可以看出和其实就是x XOR y的结果。而进位恰好是x AND y的结果。下面提供XOR和AND的真值表,进行验证。x XOR y真值表:xyoutput000011101110x AND y真值表:xyoutput000010100111(2).多位二进制加法因此进行一位二进制加法,只要对x和y进行XOR和AND运算就可以得出和以及进位
阅读全文

浙公网安备 33010602011771号