Without `--ultra`, the decompression memory budget is capped at 8 MB.
At `--ultra -20`, it's increased to 32 MB.
That's still less than XZ, which reaches 64 MB.
That's still less than XZ, which reaches 64 MB.
Brotli defines memory use as log2 on command line, i.e., 32 MB = 1 << 25
zstd uses a lookup table where the number given by the user is mapped to a decoding-time memory use. The user just needs to look it up if they want to control decoder memory use.
If one benchmarks zstd with `20` and brotli with `20`, zstd may be using 32 MB of decoding memory, where one is specifying 1 MB for brotli. By default zstd tends to use 8 MB for decoding (however it is variable with encoding effort setting) and brotli 4 MB for decoding (not changing with the encoding effort setting).