![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hsc
文章平均质量分 73
dummytea
这个作者很懒,什么都没留下…
展开
-
GZIP源代码分析(一)
Gzip是Linux下的压缩软件,.gz后缀的文件就是经gzip压缩后的文件。Gzip的源码当然由压缩和解压缩两部分构成,但本文只打算介绍其压缩部分,这部分的代码风格良好,且注释充分,并能很好的体现所用到的算法,而解压的代码完全是没有注释的一坨,其解压思路我们大致可以根据压缩过程反向推理出来,所以就不管它了。目录一、算法介绍二、实现介绍……一、Gzip中涉及的压原创 2012-12-09 19:17:18 · 4136 阅读 · 0 评论 -
Gzip源代码分析(二)
LZ77算法的实现LZ77算法其实就是一个字符串匹配的算法。就是要顺序扫描待压缩文件的每一字节,查找当前这一字节开头的串(以下称“当前串”,当前串起始地址确定,但长度不确定)是否在已扫描过的文本中出现过,以及出现的位置。为了快速查找当前串的匹配串,需要一张哈希表来记录之前出现的字符串的位置。但是这张哈希表可能非常之庞大。因为,单是从某一字节开始的串就有长度从1,2,3,……的一系列串, 要原创 2012-12-25 21:45:25 · 2089 阅读 · 0 评论 -
Gzip源代码分析(四)
哈弗曼编码首先说明一下涉及到的数据结构:typedef struct ct_data { union { ush freq; /* frequency count */ ush code; /* bit string */ } fc; union { ush dad; /原创 2012-12-31 11:05:15 · 1902 阅读 · 0 评论 -
GZIP源代码分析(三)
接上回经LZ77算法处理后,原始数据被归为两类数据对象:literal,即没有被匹配上的字节,以及(length, distance)二元组。Gzip按照扫描产生的先后顺序把它们有序保存在两个缓冲数组中l_buf和d_buf,其中l_buf保存literal和length,d_buf保存distance。由于literal和length混杂保存在同一个数组中,因此还需要一个叫做flag_b原创 2012-12-30 15:14:46 · 1598 阅读 · 0 评论 -
变长参数入参VS数组入参
gzip写烦了,先写个小题目。当函数的参数个数可变时,我们可以采用变长参数入参或者数组入参(重载不在此讨论之列)。通常还都会有一个参数来标明实际的参数个数:Func_va(int num, ...)Func_array(int num, type array[])那么这两者有什么区别呢?区别一:类型检查可变参数:不需要定义类型,编译器也不会做检查。甚至可变参数之间忘加逗原创 2013-01-01 13:49:18 · 1733 阅读 · 0 评论 -
Make Correct Code Look Correct
这是以前从一本书上看到的一篇文章,在网上也找到了英文原版http://www.joelonsoftware.com/articles/Wrong.html这里仅仅想用一个简单的例子把原文思想再复述一下,再掐个头去个尾,添点油加点醋。匈牙利命名法貌似匈牙利命名法挺有争议的,说实话,我也没怎么感受到它的好处。像C语言,编译器会帮我们检查类型,又何必再在名字上画蛇添足呢;名字前缀上类原创 2013-01-04 20:09:59 · 617 阅读 · 0 评论