size_t ZSTD_estimateDCtxSize(void);
</b><p> These functions make it possible to estimate memory usage
of a future {D,C}Ctx, before its creation.
- ZSTD_estimateCCtxSize() will provide a budget large for any compression level up to selected one.
+ ZSTD_estimateCCtxSize() will provide a budget large enough for any compression level up to selected one.
It will also consider src size to be arbitrarily "large", which is worst case.
If srcSize is known to always be small, ZSTD_estimateCCtxSize_advanced() can provide a tighter estimation.
ZSTD_estimateCCtxSize_advanced() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel.
size_t ZSTD_estimateCStreamSize_advanced(ZSTD_compressionParameters cParams);
size_t ZSTD_estimateDStreamSize(size_t windowSize);
size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize);
-</b><p> ZSTD_estimateCStreamSize() will provide a budget large for any compression level up to selected one.
+</b><p> ZSTD_estimateCStreamSize() will provide a budget large enough for any compression level up to selected one.
It will also consider src size to be arbitrarily "large", which is worst case.
If srcSize is known to always be small, ZSTD_estimateCStreamSize_advanced() can provide a tighter estimation.
ZSTD_estimateCStreamSize_advanced() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel.
},
};
+#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG>=1)
/* This function just controls
* the monotonic memory budget increase of ZSTD_defaultCParameters[0].
* Run only once, on first ZSTD_getCParams() usage, when ZSTD_DEBUG is enabled
*/
MEM_STATIC void ZSTD_check_compressionLevel_monotonicIncrease_memoryBudget(void)
{
-# define ZSTD_TABLECOST(h,c) ((1<<(h)) + (1<<(c)))
-# define ZDCP_FIELD(l,field) (ZSTD_defaultCParameters[0][l].field)
-# define ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(l) { \
- assert(ZDCP_FIELD(l,windowLog) <= ZDCP_FIELD(l+1,windowLog) ); \
- assert(ZSTD_TABLECOST(ZDCP_FIELD(l,hashLog), ZDCP_FIELD(l,chainLog)) <= ZSTD_TABLECOST(ZDCP_FIELD(l+1,hashLog), ZDCP_FIELD(l+1,chainLog)) ); \
+ int level;
+ for (level=1; level<ZSTD_maxCLevel(); level++) {
+ ZSTD_compressionParameters const c1 = ZSTD_defaultCParameters[0][level];
+ ZSTD_compressionParameters const c2 = ZSTD_defaultCParameters[0][level+1];
+ DEBUGLOG(3, "controlling compression params level %i", level);
+ assert(c1.windowLog <= c2.windowLog);
+# define ZSTD_TABLECOST(h,c) ((1<<(h)) + (1<<(c)))
+ assert(ZSTD_TABLECOST(c1.hashLog, c1.chainLog) <= ZSTD_TABLECOST(c2.hashLog, c2.chainLog));
}
-
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(1);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(2);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(3);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(4);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(5);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(6);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(7);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(8);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(9);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(10);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(11);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(12);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(13);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(14);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(15);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(16);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(17);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(18);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(19);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(20);
- ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(21);
- assert(ZSTD_maxCLevel()==22);
}
+#endif
/*! ZSTD_getCParams() :
* @return ZSTD_compressionParameters structure for a selected compression level, `srcSize` and `dictSize`.