slightly adjusted default-distribution threshold

depending on strategy.
fast favors faster compression and decompression speeds.
This commit is contained in:
Yann Collet 2018-06-26 20:10:45 -07:00
parent ff773bfcde
commit 4489daec09
2 changed files with 26 additions and 1 deletions

View File

@ -872,6 +872,28 @@ size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long
ZSTD_p_forceMaxWindow=1100, </b>/* Force back-reference distances to remain < windowSize,<b>
* even when referencing into Dictionary content (default:0) */
ZSTD_p_forceAttachDict, </b>/* ZSTD supports usage of a CDict in-place<b>
* (avoiding having to copy the compression tables
* from the CDict into the working context). Using
* a CDict in this way saves an initial setup step,
* but comes at the cost of more work per byte of
* input. ZSTD has a simple internal heuristic that
* guesses which strategy will be faster. You can
* use this flag to override that guess.
*
* Note that the by-reference, in-place strategy is
* only used when reusing a compression context
* with compatible compression parameters. (If
* incompatible / uninitialized, the working
* context needs to be cleared anyways, which is
* about as expensive as overwriting it with the
* dictionary context, so there's no savings in
* using the CDict by-ref.)
*
* Values greater than 0 force attaching the dict.
* Values less than 0 force copying the dict.
* 0 selects the default heuristic-guided behavior.
*/
} ZSTD_cParameter;
</b></pre><BR>

View File

@ -1819,8 +1819,11 @@ ZSTD_selectEncodingType(
if (strategy < ZSTD_lazy) {
if (isDefaultAllowed) {
size_t const staticFse_nbSeq_max = 1000;
size_t const dynamicFse_nbSeq_min = (size_t)1 << defaultNormLog; /* 32 for offset, 64 for lengths */
size_t const mult = 10 - strategy;
size_t const baseLog = 3;
size_t const dynamicFse_nbSeq_min = (((size_t)1 << defaultNormLog) * mult) >> baseLog; /* 28-36 for offset, 56-72 for lengths */
assert(defaultNormLog >= 5 && defaultNormLog <= 6); /* xx_DEFAULTNORMLOG */
assert(mult <= 9 && mult >= 7);
if ( (*repeatMode == FSE_repeat_valid)
&& (nbSeq < staticFse_nbSeq_max) ) {
DEBUGLOG(5, "Selected set_repeat");