我在我的应用程序中使用libLZF进行压缩。在文档中,有一条评论与我有关:
lzf_compress might use different algorithms on different systems and
even different runs, thus might result in different compressed strings
depending on the phase of the moon or similar factors.我计划比较压缩后的数据,以了解输入是否相同。显然,如果使用不同的算法,那么压缩数据就会不同。有没有解决这个问题的办法?可能是一种每次都强制执行某个算法的方法?或者这句话在实践中从来都不是真的?毕竟,phase of the moon, or similar factors有点奇怪。
发布于 2011-03-15 22:51:51
“月相依赖”的原因是它们省略了一些数据结构的初始化,以便挤出一点性能(当然,只有在它不影响解压缩正确性的情况下)。就压缩库而言,这并不是什么稀奇的把戏。因此,如果您将压缩代码放在一个单独的、一次性的进程中,并且您的操作系统在将其移交给一个进程之前将其内存清零(所有“大”OSes都会这样做,但一些较小的进程可能不会这样做),那么您将始终得到相同的压缩结果。
另外,请注意lzfP.h中的以下内容:
/*
* You may choose to pre-set the hash table (might be faster on some
* modern cpus and large (>>64k) blocks, and also makes compression
* deterministic/repeatable when the configuration otherwise is the same).
*/
#ifndef INIT_HTAB
# define INIT_HTAB 0
#endif所以我认为你只需要在编译libLZF时使用#define INIT_HTAB 1来确定它,尽管在没有进一步分析的情况下不会对它下太大的赌注。
发布于 2011-03-15 22:24:48
动态解压,然后进行比较。
libLZF的网站声明“解压...基本上是(未优化的)memcpy速度”。
https://stackoverflow.com/questions/5313150
复制相似问题