【发布时间】:2016-09-15 14:31:52
【问题描述】:
我目前正在玩zlib。
通常的例子或多或少如下(C/C++伪代码)
z_stream zs;
memset(&zs, 0, sizeof(zs));
if (deflateInit(&zs, Z_DEFAULT_COMPRESSION) != Z_OK)
return false;
zs.next_in = input_data;
zs.avail_in = input_size;
zs.next_out = output_data;
zs.avail_out = output_size;
int result = deflate(&zs, Z_FINISH);
deflateEnd(&zs);
return result == Z_STREAM_END ? true : false;
使用 valgrind 我发现 deflateInit 和 memset 并不是完全“免费”的操作,而是需要相当长的时间。
我的问题是,我可以重复使用 z_stream 和 deflateInit 吗?
例如我可以通过更新缓冲区多次放气吗?
【问题讨论】:
-
为什么不自己测试一下呢?
-
如果我测试它并奇迹般地工作,它仍然不意味着它是正确的。它可以将数据“添加”到之前的“部分”或其他内容。