sisong / HDiffPatch

a C\C++ library and command-line tools for Diff & Patch between binary files or directories(folder); cross-platform; runs fast; create small delta/differential; support large files and limit memory requires when diff & patch.
Other
1.56k stars 287 forks source link

ZSTD 搞了个 --patch-from 功能,也可以实现 diff+patch ,希望能加入到对比中。 #326

Closed byronhe closed 1 year ago

byronhe commented 1 year ago

https://github.com/facebook/zstd/wiki/Zstandard-as-a-patching-engine

sisong commented 1 year ago

近期可能不准备将其正式加入对比;
简单和hdiffz -c-zstd比较测试了一下,diff的参数: zstd --ultra -21 -f --patch-from={old} {new} -o {pat} (另外 zstd 压缩时可以用 --long=来控制压缩字典的大小,但在patch模式下好像根本不起作用。)
优点:在小文件,文本短匹配比较多的情况下,zstd很有竞争力,输出的补丁稍小。 缺点:对大文件或二进制(apk)补丁稍大;diff内存占用较大运行稍慢(可以降低压缩系数来改善,但这样输出的补丁就会变大)。
patch参数: zstd -d -f --patch-from={old} {pat} -o {new}
优点:执行速度很快,小文件zstd有时快些(大文件一般慢些); 缺点:patch 内存占用很大,大概是 O(oldSize*(1~2)+decompressDictSize), 所以对于稍大的文件,patch时需要添加--memory=参数补充足够内存才能正确执行。

sisong commented 1 year ago

对比测试中已经添加了zstd --patch-from,见readme
本次也更新了程序和源码测试用例,apk测试用例不变; zstd效果不错,就是内存占用方面有点大。