]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
[lib] Add ZSTD_COMPRESS_HEAPMODE tuning parameter
authorNick Terrell <terrelln@fb.com>
Fri, 25 Sep 2020 00:52:16 +0000 (17:52 -0700)
committerNick Terrell <terrelln@fb.com>
Fri, 25 Sep 2020 02:42:04 +0000 (19:42 -0700)
contrib/linux-kernel/Makefile
lib/compress/zstd_compress.c

index c04c3633b8114feb719ee279b91fdc4000380fd9..1d6fd96d26255a0cdbf00317bd260edabd7bf5d1 100644 (file)
@@ -36,6 +36,7 @@ libzstd:
                -DSTATIC_BMI2=0 \
                -DZSTD_ADDRESS_SANITIZER=0 \
                -DZSTD_MEMORY_SANITIZER=0 \
+               -DZSTD_COMPRESS_HEAPMODE=1 \
                -UZSTD_NO_INLINE \
                -UNO_PREFETCH \
                -U__cplusplus \
index 7fe539c3de32ec6585dda7cf150104f39b6c8f1d..b6edba207450db1445a9c88489f50c4bc70dcddb 100644 (file)
 #include "zstd_ldm.h"
 #include "zstd_compress_superblock.h"
 
+/* ***************************************************************
+*  Tuning parameters
+*****************************************************************/
+/*!
+ * COMPRESS_HEAPMODE :
+ * Select how default decompression function ZSTD_compress() allocates its context,
+ * on stack (0, default), or into heap (1).
+ * Note that functions with explicit context such as ZSTD_compressCCtx() are unaffected.
+ */
+#ifndef ZSTD_COMPRESS_HEAPMODE
+#  define ZSTD_COMPRESS_HEAPMODE 0
+#endif
+
 
 /*-*************************************
 *  Helper functions
@@ -3370,10 +3383,17 @@ size_t ZSTD_compress(void* dst, size_t dstCapacity,
                      int compressionLevel)
 {
     size_t result;
+#if ZSTD_COMPRESS_HEAPMODE
+    ZSTD_CCtx* cctx = ZSTD_createCCtx();
+    RETURN_ERROR_IF(!cctx, memory_allocation, "ZSTD_createCCtx failed");
+    result = ZSTD_compressCCtx(cctx, dst, dstCapacity, src, srcSize, compressionLevel);
+    ZSTD_freeCCtx(cctx);;
+#else
     ZSTD_CCtx ctxBody;
     ZSTD_initCCtx(&ctxBody, ZSTD_defaultCMem);
     result = ZSTD_compressCCtx(&ctxBody, dst, dstCapacity, src, srcSize, compressionLevel);
     ZSTD_freeCCtxContent(&ctxBody);   /* can't free ctxBody itself, as it's on stack; free only heap content */
+#endif
     return result;
 }