mirror of
https://github.com/facebook/zstd.git
synced 2025-12-08 00:03:24 -05:00
compress uses less memory for small blocks
This commit is contained in:
parent
a308259afa
commit
120230b895
@ -100,8 +100,6 @@ static void ZSTD_resetSeqStore(seqStore_t* ssPtr)
|
|||||||
/* *************************************
|
/* *************************************
|
||||||
* Context memory management
|
* Context memory management
|
||||||
***************************************/
|
***************************************/
|
||||||
#define WORKPLACESIZE (BLOCKSIZE*3)
|
|
||||||
|
|
||||||
struct ZSTD_CCtx_s
|
struct ZSTD_CCtx_s
|
||||||
{
|
{
|
||||||
const BYTE* nextSrc; /* next block here to continue on current prefix */
|
const BYTE* nextSrc; /* next block here to continue on current prefix */
|
||||||
@ -113,6 +111,7 @@ struct ZSTD_CCtx_s
|
|||||||
ZSTD_parameters params;
|
ZSTD_parameters params;
|
||||||
void* workSpace;
|
void* workSpace;
|
||||||
size_t workSpaceSize;
|
size_t workSpaceSize;
|
||||||
|
size_t blockSize;
|
||||||
|
|
||||||
seqStore_t seqStore; /* sequences storage ptrs */
|
seqStore_t seqStore; /* sequences storage ptrs */
|
||||||
U32* hashTable;
|
U32* hashTable;
|
||||||
@ -170,11 +169,14 @@ void ZSTD_validateParams(ZSTD_parameters* params)
|
|||||||
static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
||||||
ZSTD_parameters params)
|
ZSTD_parameters params)
|
||||||
{
|
{
|
||||||
|
/* note : params considered validated here */
|
||||||
|
const size_t blockSize = MIN(BLOCKSIZE, (size_t)1 << params.windowLog);
|
||||||
|
|
||||||
/* reserve table memory */
|
/* reserve table memory */
|
||||||
{
|
{
|
||||||
const U32 contentLog = (params.strategy == ZSTD_fast) ? 1 : params.contentLog;
|
const U32 contentLog = (params.strategy == ZSTD_fast) ? 1 : params.contentLog;
|
||||||
const size_t tableSpace = ((1 << contentLog) + (1 << params.hashLog)) * sizeof(U32);
|
const size_t tableSpace = ((1 << contentLog) + (1 << params.hashLog)) * sizeof(U32);
|
||||||
const size_t neededSpace = tableSpace + WORKPLACESIZE;
|
const size_t neededSpace = tableSpace + (3*blockSize);
|
||||||
if (zc->workSpaceSize < neededSpace)
|
if (zc->workSpaceSize < neededSpace)
|
||||||
{
|
{
|
||||||
free(zc->workSpace);
|
free(zc->workSpace);
|
||||||
@ -195,12 +197,13 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
|||||||
zc->dictLimit = 0;
|
zc->dictLimit = 0;
|
||||||
zc->lowLimit = 0;
|
zc->lowLimit = 0;
|
||||||
zc->params = params;
|
zc->params = params;
|
||||||
|
zc->blockSize = blockSize;
|
||||||
zc->seqStore.offsetStart = (U32*) (zc->seqStore.buffer);
|
zc->seqStore.offsetStart = (U32*) (zc->seqStore.buffer);
|
||||||
zc->seqStore.offCodeStart = (BYTE*) (zc->seqStore.offsetStart + (BLOCKSIZE>>2));
|
zc->seqStore.offCodeStart = (BYTE*) (zc->seqStore.offsetStart + (blockSize>>2));
|
||||||
zc->seqStore.litStart = zc->seqStore.offCodeStart + (BLOCKSIZE>>2);
|
zc->seqStore.litStart = zc->seqStore.offCodeStart + (blockSize>>2);
|
||||||
zc->seqStore.litLengthStart = zc->seqStore.litStart + BLOCKSIZE;
|
zc->seqStore.litLengthStart = zc->seqStore.litStart + blockSize;
|
||||||
zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (BLOCKSIZE>>2);
|
zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (blockSize>>2);
|
||||||
zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (BLOCKSIZE>>2);
|
zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (blockSize>>2);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1919,7 +1922,7 @@ static size_t ZSTD_compress_generic (ZSTD_CCtx* ctxPtr,
|
|||||||
void* dst, size_t maxDstSize,
|
void* dst, size_t maxDstSize,
|
||||||
const void* src, size_t srcSize)
|
const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
size_t blockSize = BLOCKSIZE;
|
size_t blockSize = ctxPtr->blockSize;
|
||||||
size_t remaining = srcSize;
|
size_t remaining = srcSize;
|
||||||
const BYTE* ip = (const BYTE*)src;
|
const BYTE* ip = (const BYTE*)src;
|
||||||
BYTE* const ostart = (BYTE*)dst;
|
BYTE* const ostart = (BYTE*)dst;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user