瀏覽代碼

bzip: make ftab[] and crc32table[] member arrays of EState, do not allocate

function                                             old     new   delta
mainSort                                             941     986     +45
fallbackSort                                        1471    1469      -2
add_pair_to_block                                    194     188      -6
compressStream                                       543     515     -28
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 45/-36)              Total: 9 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Denys Vlasenko 2 年之前
父節點
當前提交
6d3da732a5
共有 2 個文件被更改,包括 10 次插入8 次删除
  1. 3 4
      archival/libarchive/bz/bzlib.c
  2. 7 4
      archival/libarchive/bz/bzlib_private.h

+ 3 - 4
archival/libarchive/bz/bzlib.c

@@ -99,9 +99,8 @@ void BZ2_bzCompressInit(bz_stream *strm, int blockSize100k)
 	s->ptr   = (uint32_t*)s->arr1;
 	s->arr2  = xmalloc((n + BZ_N_OVERSHOOT) * sizeof(uint32_t));
 	s->block = (uint8_t*)s->arr2;
-	s->ftab  = xmalloc(65537                * sizeof(uint32_t));
 
-	s->crc32table = crc32_filltable(NULL, 1);
+	crc32_filltable(s->crc32table, 1);
 
 	s->state             = BZ_S_INPUT;
 	s->mode              = BZ_M_RUNNING;
@@ -369,8 +368,8 @@ void BZ2_bzCompressEnd(bz_stream *strm)
 	s = strm->state;
 	free(s->arr1);
 	free(s->arr2);
-	free(s->ftab);
-	free(s->crc32table);
+	//free(s->ftab);       // made it array member of s
+	//free(s->crc32table); // ditto
 	free(s);
 }
 

+ 7 - 4
archival/libarchive/bz/bzlib_private.h

@@ -134,7 +134,7 @@ typedef struct EState {
 	/* for doing the block sorting */
 	uint32_t *arr1;
 	uint32_t *arr2;
-	uint32_t *ftab;
+	//uint32_t *ftab; //moved into this struct, see below
 
 	uint16_t *quadrant;
 	int32_t  budget;
@@ -160,9 +160,6 @@ typedef struct EState {
 	uint32_t bsBuff;
 	int32_t  bsLive;
 
-	/* guess what */
-	uint32_t *crc32table;
-
 	/* block and combined CRCs */
 	uint32_t blockCRC;
 	uint32_t combinedCRC;
@@ -185,6 +182,12 @@ typedef struct EState {
 
 	uint8_t  len[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
 
+	/* guess what */
+	uint32_t crc32table[256];
+
+	/* for doing the block sorting */
+	uint32_t ftab[65537];
+
 	/* stack-saving measures: these can be local, but they are too big */
 	int32_t  sendMTFValues__code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
 	int32_t  sendMTFValues__rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];