可以将zlib的z_stream重用于几个操作吗?

Nic*_*ick 3 c c++ zlib

我目前在玩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;
Run Code Online (Sandbox Code Playgroud)

使用valgrind时,我看到deflateInit和memset并不是完全“免费”的操作,但是需要花费大量时间。

我的问题是,我可以重用z_streamdeflateInit
例如,是否可以仅通过更新缓冲区多次放气?

Mar*_*ler 5

是。您可以使用deflateReset()来获得与deflateEnd()后继效果相同的效果deflateInit(),但完全可以避免昂贵的取消分配和重新分配。