From 3f75d5252766bf0e638cf3fb7f5d63da50baaefe Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Fri, 31 Mar 2017 17:11:38 -0700 Subject: [PATCH] Changed ZSTD_compressBound() required so that if Total = A+B compressBound(Total) <= compressBound(A) + compressBound(B) under condition of a minimum size for A and B Will help for ZSTDMT_compress() memory allocation --- lib/compress/zstd_compress.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index c31f8db9..cc69f118 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -32,7 +32,10 @@ typedef enum { ZSTDcs_created=0, ZSTDcs_init, ZSTDcs_ongoing, ZSTDcs_ending } ZS * Helper functions ***************************************/ #define ZSTD_STATIC_ASSERT(c) { enum { ZSTD_static_assert = 1/(int)(!!(c)) }; } -size_t ZSTD_compressBound(size_t srcSize) { return FSE_compressBound(srcSize) + 12; } +size_t ZSTD_compressBound(size_t srcSize) { + size_t const margin = (srcSize < 512 KB) ? 16 : 0; + return srcSize + (srcSize >> 8) + margin; +} /*-*************************************