From: Yann Collet Date: Mon, 4 Apr 2016 11:28:28 +0000 (+0200) Subject: reduced memory usage of very hich compression levels in 32-bits mode X-Git-Tag: v0.6.0^2~17^2~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1005fc1276347d6661de79a0edeba28006a9a7de;p=thirdparty%2Fzstd.git reduced memory usage of very hich compression levels in 32-bits mode --- diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index 6905dcbf6..da5192012 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -226,7 +226,7 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc, { size_t const optSpace = ((MaxML+1) + (MaxLL+1) + (1<workSpaceSize < neededSpace) { free(zc->workSpace); zc->workSpace = malloc(neededSpace); @@ -2525,7 +2525,7 @@ static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEV ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, U64 srcSize, size_t dictSize) { ZSTD_compressionParameters cp; - size_t addedSize = srcSize ? 0 : 500; + size_t const addedSize = srcSize ? 0 : 500; U64 const rSize = srcSize+dictSize ? srcSize+dictSize+addedSize : (U64)-1; U32 const tableID = (rSize <= 256 KB) + (rSize <= 128 KB) + (rSize <= 16 KB); /* intentional underflow for srcSizeHint == 0 */ if (compressionLevel<=0) compressionLevel = 1; @@ -2534,6 +2534,10 @@ ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, U64 srcSize, si tableID=0; #endif cp = ZSTD_defaultCParameters[tableID][compressionLevel]; - if (cp.windowLog > ZSTD_WINDOWLOG_MAX) cp.windowLog = ZSTD_WINDOWLOG_MAX; /* auto-correction, for 32-bits mode */ + if (MEM_32bits()) { /* auto-correction, for 32-bits mode */ + if (cp.windowLog > ZSTD_WINDOWLOG_MAX) cp.windowLog = ZSTD_WINDOWLOG_MAX; + if (cp.contentLog > ZSTD_CONTENTLOG_MAX) cp.contentLog = ZSTD_CONTENTLOG_MAX; + if (cp.hashLog > ZSTD_HASHLOG_MAX) cp.hashLog = ZSTD_HASHLOG_MAX; + } return cp; } diff --git a/lib/zstd_static.h b/lib/zstd_static.h index ecc5ff58b..acf9791ea 100644 --- a/lib/zstd_static.h +++ b/lib/zstd_static.h @@ -61,9 +61,9 @@ extern "C" { #define ZSTD_WINDOWLOG_MIN 18 #define ZSTD_CONTENTLOG_MAX (ZSTD_WINDOWLOG_MAX+1) #define ZSTD_CONTENTLOG_MIN 4 -#define ZSTD_HASHLOG_MAX 28 +#define ZSTD_HASHLOG_MAX ZSTD_WINDOWLOG_MAX #define ZSTD_HASHLOG_MIN 12 -#define ZSTD_SEARCHLOG_MAX (ZSTD_CONTENTLOG_MAX-1) +#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1) #define ZSTD_SEARCHLOG_MIN 1 #define ZSTD_SEARCHLENGTH_MAX 7 #define ZSTD_SEARCHLENGTH_MIN 3