gzip 如何找不到两个相同的部分?
How do gzip don't find two same part?
我写了这样的代码
#include "zlib.h"
unsigned char dst[1<<26];
unsigned char src[1<<24];
int main() {
unsigned long dstlen = 1<<26;
srand (12345);
for (int i=0; i<1<<23; i++) src[i] = src[i | 1<<23] = rand();
compress(dst,&dstlen,src,1<<24);
printf ("%d/%d = %f\n", dstlen, 1<<24, dstlen / double(1<<24));
}
它试图压缩两个相同的 223 字节部分连接在一起。然而,结果是
16782342/16777216 = 1.000306
这种规则的数据怎么不压缩呢?
zlib 中匹配字符串的最大距离为 32,768 个字节。
我写了这样的代码
#include "zlib.h"
unsigned char dst[1<<26];
unsigned char src[1<<24];
int main() {
unsigned long dstlen = 1<<26;
srand (12345);
for (int i=0; i<1<<23; i++) src[i] = src[i | 1<<23] = rand();
compress(dst,&dstlen,src,1<<24);
printf ("%d/%d = %f\n", dstlen, 1<<24, dstlen / double(1<<24));
}
它试图压缩两个相同的 223 字节部分连接在一起。然而,结果是
16782342/16777216 = 1.000306
这种规则的数据怎么不压缩呢?
zlib 中匹配字符串的最大距离为 32,768 个字节。