При использовании zlib 1.25 в проекте iOS я заметил в своем профилировщике (Инструменты), что функция zError вызывается неоднократно и занимает 50% от общего времени надувания.
Кто-нибудьзнаете почему zError будет вызываться так?Я не называю это нигде в своем собственном коде, который представляет собой довольно простую функцию надувания, вставленную ниже:
int UPNExtractorGZInflate(const void *src, int srcLen, void *dst, int dstLen) {
z_stream strm = {0};
strm.total_in = strm.avail_in = srcLen;
strm.total_out = strm.avail_out = dstLen;
strm.next_in = (Bytef *) src;
strm.next_out = (Bytef *) dst;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
int err = -1;
int ret = -1;
err = inflateInit2(&strm, (15 + 16)); //15 window bits, and the +16 tells zlib to decode gzip
if (err == Z_OK) {
err = inflate(&strm, Z_FINISH);
if (err == Z_STREAM_END) {
ret = strm.total_out;
}
else {
inflateEnd(&strm);
return err;
}
}
else {
inflateEnd(&strm);
return err;
}
inflateEnd(&strm);
return ret;
}
А вот соответствующий вывод профилировщика (обратите внимание, что zError занимает 50% от общего времени надувания):