2005年11月6日

搞 Java 也有一段时间了

摘要: 搞 Java 也有一段时间了。Java 现在也支持 GP 了。但是感觉 Java 好像总是那么那么的。可能是 C++ 用惯了。但是 C++ 的表达能力是在是比 Java 强得多。MS 也推出了 C++/CLI,简单得看了一下,那简直就是我梦想中的 C++ 应该有的样子,虽然看上去有点复杂。Java 的 GP 语法,虽未如 C++ 般达到了图灵完备,但是它的 F-约束,比起 C++ ,要好一些,它很直观,而实际上在 C++ 中没有相同的语法结构。C++ 有没有必要也增加这种语法呢? 阅读全文

posted @ 2005-11-06 16:34 能发波 阅读(104) 评论(0) 推荐(0)

2005年11月5日

自适应Lru(最近最少使用)算法

摘要: 在缓存管理算法中,Lru 几乎是公认的最优的算法。然而它也有一些缺陷,主要是因为:它假定对实体的访问有局部特性。当访问模式没有局部特性的时候,它就会退化为FIFO(先进先出)算法。 在我写一个文件系统的实现时,这种现象很让我头疼,因为很多时候,对一个文件的访问大多是顺序的,前面读取过的内容几乎不会被再次读取。苦思冥想之后,我终于找到了一种方案: 就是在缓存击中率降低时,移动将被换出的缓存结点,当击中率很低时,此算法就变成了LIFO(后进先出)。在顺序访问,和完全随机访问时,比Lru有很大的优越性。而在击中率比较高的时侯,它就是 Lru 算法。 以下是算法的关键代码:// insert... 阅读全文

posted @ 2005-11-05 14:04 能发波 阅读(207) 评论(0) 推荐(0)

2005年11月3日

高性能文件系统实现

摘要: 高性能文件系统-演示文档 PowerPoint下载 演示文档首页Word Doc 文档下载 Fat 文件系统规格白皮书 文件系统的两种实现 标题 高性能文件系统 (该页文档描述) 最小实现 可扩展性 优良(基于虚拟文件系统构架) 无 时间性能 优良,接近硬件极限速度, 可用于驱动硬盘 差,仅可用于驱动存储卡片 空间性能 较大, Rom(Code)30K , Ram(RunTime) >= 32K Rom(code) =2K 支持 Fat12/Fat16/Fat32 ,长文件名 Fat12/Fat16 ,仅 8.3 文件名 可自定义路径解析 其它特点 对连续簇编组,不用 FatCache 阅读全文

posted @ 2005-11-03 20:59 能发波 阅读(168) 评论(0) 推荐(0)

C++使用模板进行的一种重构

摘要: 如果有一些遗留代码,里面有很多结构,定义了一些相同的成员,但在一些时候,需要取出这些成员,进行同样的处理。如下面这些代码的红色部分。——原先的程序结构是使用类型码来区分实际的类型,客观地说,这些遗留代码是比较混乱的。不想说太多,用简单的代码来说明问题吧。typedef struct _EVT_SWITCH :public EVT_HEAD {DWORDdwCategory;DWORD dwSeverity;DWORDdwEvtSrcID;DWORDdwEvtSrcOffset;DWORD dwSrcIp;DWORD dwSrcPort;DWORD dwDstIp;DWORD dwDstPort 阅读全文

posted @ 2005-11-03 20:58 能发波 阅读(184) 评论(0) 推荐(0)

C语言垃圾代码清除工具(含源码)

摘要: CodeClean 使用说明 1. 说明 工程中有许多垃圾代码,CodeClean能识别的垃圾代码指从入口不可达的垃圾函数和全局变量。CodeClean 可以扫描出所有这类代码,从扫描垃圾的角度,未对函数和全局变量未做区别。 有很多函数和全局变量被其它的函数或全局变量引用到,但引用它的函数(或全局变量)从入口是不可达的,这样的函数(或全局变量)称它为 Island。 本程序仅扫描C语言(不包括C++)的垃圾代码。本程序不对C语言程序进行预处理(忽略了“#”开头的行),对宏调用不做特别处理,将它看作是一个普通的函数调用。 对于已知的未使用的变量,或函数(如这些变量或函数在汇编语言程序中使用)。为 阅读全文

posted @ 2005-11-03 20:56 能发波 阅读(566) 评论(1) 推荐(1)

使用 C 语言的“准元程序”设计

摘要: 将 C 语言的预编译语言看成是“元语言”,使用该元语言进行程序设计但为什么叫“准元程序”?因为 C 语言的预编译语言没有迭代结构,所以C 语言的元程序语言不是图灵完备的。举个简单的例子,我们无法用 C 语言的“元语言”写出一个计算 factorial(x)——x 的阶乘的程序;而用 C++的模板就可以(使用模板特化)。因为这需要语言的迭代结构。C预编译语言没有迭代结构的原因是宏替换仅发生在源语言的宏调用中,预编译中的宏调用是不会发生替换的(除了条件编译中条件中对宏的调用)如:#define macro1(x) (x)*(x)#define macro2(x) macro1(x) /... 阅读全文

posted @ 2005-11-03 20:48 能发波 阅读(212) 评论(0) 推荐(0)

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_TOKEN_1(t1, t2) 的结果是 t1t2CAT_TOKEN(t1, t2) 的结果是 I_am_leipengCAT_TOKEN 相当有用。2. 将0转化为0,而将非零转化为 1,可以转化指针#define convert_ 阅读全文

posted @ 2005-11-03 20:39 能发波 阅读(110) 评论(0) 推荐(0)

一个脚本语言编译器

摘要: 该编译器及运行环境采用虚拟机执行方式,即将源文件编译为中间代码(类似 Java 字节码),而中间代码在虚拟机(不是堆栈机,Java虚拟机是“准堆栈机”,大部分指令是堆栈式的,但为了效率,也有小部分指令不是堆栈式的)上执行。 可用于编译原理学习。 代码下载:http://febird.nease.net/OtherProduct/ScriptCompiler/ScriptEngine.rar语言描述:http://febird.nease.net/OtherProduct/ScriptCompiler/Specification.htm我的原文:http://febird.nease.net.. 阅读全文

posted @ 2005-11-03 20:29 能发波 阅读(139) 评论(0) 推荐(0)

按序号索引二叉树

摘要: 理论上,一个平衡的二叉树,可以在 O(logn)时间内,按中序遍历的顺序号(或者说下标)完成对结点的搜索。不过,这需要在每个结点上存储以该结点为根的子树的大小,通过增加存储的途径,来改善性能。 如果这是一棵排序树,那么这个序号就是按大小排列的顺序号。 但是如果这颗树在程序运行过程中有对结点的动态插入和删除(插入和删除时,以及调整平衡性时,都需要调整插入/删除结点路径上的Node.count,时间复杂度为O(logn)),那么每个结点的序号就是变化的。 因此,不能把序号存储在某个地方,然后又企图根据这一序号,重新找到该序号先前对应的那个结点。可能时因为这个原因,在很多时候,没有对这种计... 阅读全文

posted @ 2005-11-03 20:27 能发波 阅读(165) 评论(0) 推荐(0)

2004年6月15日

软件加密技术及实现-续-01

摘要: 两年前,我曾在毕业设计:《软件加密技术及实现》中设想使用“代码转移”来实现更强大的反破解功能。直到前不久,在朋友的鼓励下,我在多个方面增强了原先的软件SoftProtector,并改为图形界面,改名为《秦赢甲胄》(可在各搜索引擎搜索),开始尝试商业化。为了实现更强大的反破解功能,前不久我开始思考实现“代码转移”,不想实现根设想完全两码事,太复杂了:需要对 x86 进行反汇编,代码分析,甚至虚拟执行(虚拟机),来完善《秦赢甲胄》。在参考了很多资料之后,我终于深有体会,我需要更多的。希望大家支持!目前我的参考资料:1. 《虚拟机设计与实现》,说实话,该书深度不够,不过它提到了不少好的参考资料。2. 阅读全文

posted @ 2004-06-15 10:56 能发波 阅读(142) 评论(0) 推荐(0)

导航