- 博客(11)
- 资源 (8)
- 收藏
- 关注
原创 使用" 参数化基类" 和" 成员函数指针" 模拟实现虚函数
// 使用" 参数化基类" 和" 成员函数指针" 模拟实现虚函数。#include "stdafx.h" /* 使用 "参数化基类 "和 "成员函数指针 "模拟实现虚函数。 可能大家都以为只有疯子才会这么干,好好的虚函数干吗不用,而偏要拐弯抹角地 搞得这么复杂,但有时候这可能是最好地选择。举个例子吧,我写 Windows PE 文件 加壳程序的时候,遇到一个问题:
2005-11-25 19:22:00 1158
原创 stl::set 的一个缺陷
stl::set 的一个缺陷 什么都好,就一点不好:不能仅仅通过 key去查找元素。如 : #include set >struct my_struct{ int key; int value1; int value2;//……..…. //…… explicit my_struct(int key_) // explicit 禁止将 int 悄悄转化为 my_struc
2005-11-09 23:09:00 1861 2
原创 搞 Java 也有一段时间了
搞 Java 也有一段时间了。Java 现在也支持 GP 了。但是感觉 Java 好像总是那么那么的。可能是 C++ 用惯了。但是 C++ 的表达能力是在是比 Java 强得多。MS 也推出了 C++/CLI,简单得看了一下,那简直就是我梦想中的 C++ 应该有的样子,虽然看上去有点复杂。Java 的 GP 语法,虽未如 C++ 般达到了图灵完备,但是它的 F-约束,比起 C++ ,要好一些,它很
2005-11-06 16:34:00 1212
原创 自适应Lru(最近最少使用)算法
在缓存管理算法中,Lru 几乎是公认的最优的算法。然而它也有一些缺陷,主要是因为:它假定对实体的访问有局部特性。当访问模式没有局部特性的时候,它就会退化为FIFO(先进先出)算法。 在我写一个文件系统的实现时,这种现象很让我头疼,因为很多时候,对一个文件的访问大多是顺序的,前面读取过的内容几乎不会被再次读取。苦思冥想之后,我终于找到了一种方案: 就是在缓存击中率降低时,移动将被换出的缓存结
2005-11-05 14:04:00 2429
原创 高性能文件系统实现
高性能文件系统-演示文档 PowerPoint下载 演示文档首页Word Doc 文档下载 Fat 文件系统规格白皮书 文件系统的两种实现 标题 高性能文件系统 (该页文档描述) 最小实现 可扩展性 优良(基于虚拟文件系统构架) 无 时间性能 优良,接近硬件极限速度, 可用于驱动硬盘 差,仅可用于驱动存储卡片 空间性能 较大, Rom(Code)30K , Ram(RunTime) >= 32K
2005-11-03 20:59:00 2329
原创 C++使用模板进行的一种重构
如果有一些遗留代码,里面有很多结构,定义了一些相同的成员,但在一些时候,需要取出这些成员,进行同样的处理。如下面这些代码的红色部分。——原先的程序结构是使用类型码来区分实际的类型,客观地说,这些遗留代码是比较混乱的。不想说太多,用简单的代码来说明问题吧。typedef struct _EVT_SWITCH : public EVT_HEAD { DWORD dwCategory; DWORD
2005-11-03 20:58:00 1290
原创 C语言垃圾代码清除工具(含源码)
CodeClean 使用说明 1. 说明 工程中有许多垃圾代码,CodeClean能识别的垃圾代码指从入口不可达的垃圾函数和全局变量。CodeClean 可以扫描出所有这类代码,从扫描垃圾的角度,未对函数和全局变量未做区别。 有很多函数和全局变量被其它的函数或全局变量引用到,但引用它的函数(或全局变量)从入口是不可达的,这样的函数(或全局变量)称它为 Island。 本程序仅扫描C语言
2005-11-03 20:56:00 4413
原创 使用 C 语言的“准元程序”设计
将 C 语言的预编译语言看成是“元语言”,使用该元语言进行程序设计但为什么叫“准元程序”?因为 C 语言的预编译语言没有迭代结构,所以C 语言的元程序语言不是图灵完备的。举个简单的例子,我们无法用 C 语言的“元语言”写出一个计算 factorial(x)——x 的阶乘的程序;而用 C++的模板就可以(使用模板特化)。因为这需要语言的迭代结构。C预编译语言没有迭代结构的原因是宏替换仅发生在
2005-11-03 20:48:00 1690 2
原创 C 语言几个绝招
1. 符号展开连接:#define CAT_TOKEN_1(t1, t2) t1##t2#define CAT_TOKEN(t1, t2) CAT_TOKEN_1(t1,t2)CAT_TOKEN_1 直接将 t1和t2连接成 t1t2,而CAT_TOKEN 将t1和t2展开后再连接,如:#define t1 I_am_#define t2 lei_pengCAT_TO
2005-11-03 20:39:00 1179
原创 一个脚本语言编译器
该编译器及运行环境采用虚拟机执行方式,即将源文件编译为中间代码(类似 Java 字节码),而中间代码在虚拟机(不是堆栈机,Java虚拟机是“准堆栈机”,大部分指令是堆栈式的,但为了效率,也有小部分指令不是堆栈式的)上执行。 可用于编译原理学习。 代码下载:http://febird.nease.net/OtherProduct/ScriptCompiler/ScriptEngine.rar语
2005-11-03 20:29:00 2665
原创 按序号索引二叉树
理论上,一个平衡的二叉树,可以在 O(logn)时间内,按中序遍历的顺序号(或者说下标)完成对结点的搜索。不过,这需要在每个结点上存储以该结点为根的子树的大小,通过增加存储的途径,来改善性能。 如果这是一棵排序树,那么这个序号就是按大小排列的顺序号。 但是如果这颗树在程序运行过程中有对结点的动态插入和删除(插入和删除时,以及调整平衡性时,都需要调整插入/删除结点路径上的Node.count
2005-11-03 20:27:00 4471
febird C++ 库(附带所有源码)
2009-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人