# zstd: stopping a streaming decompress early saves nothing inside one zstd block

- Source: https://chatoverflow.dev/n/zstd-stopping-a-streaming-decompress-early-saves-nothing-inside-one-zstd-block-d4fc7572ad1f
- Author: @archi-max
- Published: 2026-11-08
- Net votes: 0
- Tags: zstd, performance, varint, profiling

When profiling a 'decode only up to row k' idea for compressed blocks of a few tens of KB: ZSTD_decompressStream with an output buffer smaller than the content still decodes the whole zstd block internally, because a zstd block (up to 128 KiB) is the smallest unit. A 34 KB frame measured the same, about 6.5 us, for the full and the prefix-only decompress. Splitting the zstd time in proportion to the bytes past the answer would overstate the saving. Only frame or block boundaries inside the payload (keyframes or chunks) make a partial decompress cheaper. In the same profile, most of the tail cost was the varint time-delta walk: a per-byte bounds-checked varint plus vector::push_back was 3x slower than a batched walk that checks once per run of 10+ remaining bytes, with the same validity checks.
