Template
1
0
mirror of https://github.com/bol-van/zapret2.git synced 2026-03-14 06:13:09 +00:00

nfqws2: optimize realloc increment

This commit is contained in:
bol-van
2026-01-07 08:23:45 +03:00
parent 1bbd342ff2
commit a622061b45
2 changed files with 9 additions and 4 deletions

View File

@@ -1937,7 +1937,7 @@ function gunzip_inflate(zstream, compressed_data, expected_uncompressed_chunk_si
* gunzip_init создает и возвращает контекст gzip потока для последующих вызовов других функций. Значение windowBits см. в документации по zlib (по умолчанию 47).
* gunzip_end освобождает контекст gzip. может быть освобожден сборщиком мусора, но лучше вызывать явно.
* gunzip_inflate разжимает очередную часть зипованных данных. Данные можно скармливать частями. Расжатые части конкатенируются для получения полных данных. Возвращается 2 аргумента : расжатые данные и bool признак конца gzip. В случае испорченных данных или при нехватке памяти возвращается nil.
* expected_uncompressed_chunk_size - необязательный параметр для оптимизации выделения памяти под расжимаемые данные. Если буфера не хватает, вызываются realloc, копирующие блоки памяти и влияющие на производительность. Размер следует выбирать согласно ожидаемой степени сжатия с небольшим запасом. По умолчанию - четырехкратный размер compressed_data. При нехватке буфера выполняется realloc шагами в 16K.
* expected_uncompressed_chunk_size - необязательный параметр для оптимизации выделения памяти под расжимаемые данные. Если буфера не хватает, вызываются realloc, копирующие блоки памяти и влияющие на производительность. Размер следует выбирать согласно ожидаемой степени сжатия с небольшим запасом. По умолчанию - четырехкратный размер compressed_data.
#### gzip
@@ -1950,7 +1950,7 @@ function gzip_deflate(zstream, uncompressed_data, expected_compressed_chunk_size
* gzip_init создает и возвращает контекст gzip потока для последующих вызовов других функций. Значение windowBits см. в документации по zlib (по умолчанию 31). level - уровень сжатия от 1 до 9 (по умолчанию 9), memlevel - допустимый уровень использования памяти от 1 до 8 (по умолчанию 8).
* gzip_end освобождает контекст gzip. может быть освобожден сборщиком мусора, но лучше вызывать явно.
* gzip_deflate cжимает очередную часть данных. Данные можно скармливать частями. Cжатые части конкатенируются для получения полных данных. Для финализации потока по окончанию скармливания данных функция должна быть вызвана с uncompressed_data=nil или uncompressed_data="". Возвращается 2 аргумента : сжатые данные и bool признак конца gzip. При ошибках gzip или нехватке памяти возвращается nil.
* expected_compressed_chunk_size - необязательный параметр для оптимизации выделения памяти под cжимаемые данные. Если буфера не хватает, вызываются realloc, копирующие блоки памяти и влияющие на производительность. Размер следует выбирать согласно ожидаемой степени сжатия с небольшим запасом. По умолчанию - половина размера uncompressed_data. При нехватке буфера выполняется realloc шагами в 8K.
* expected_compressed_chunk_size - необязательный параметр для оптимизации выделения памяти под cжимаемые данные. Если буфера не хватает, вызываются realloc, копирующие блоки памяти и влияющие на производительность. Размер следует выбирать согласно ожидаемой степени сжатия с небольшим запасом. По умолчанию - половина размера uncompressed_data.
### Системные функции

View File

@@ -2686,13 +2686,16 @@ static int luacall_gunzip_inflate(lua_State *L)
uzs->zs.next_in = (z_const Bytef*)luaL_checklstring(L,2,&l);
uzs->zs.avail_in = (uInt)l;
size_t bufchunk = argc>=3 ? luaL_checkinteger(L,3) : l*4;
size_t increment = bufchunk / 2;
if (increment < Z_INFL_BUF_INCREMENT) increment = Z_INFL_BUF_INCREMENT;
do
{
if ((bufsize - size) < BUFMIN)
{
if (buf)
{
bufsize += Z_INFL_BUF_INCREMENT;
bufsize += increment;
newbuf = realloc(buf, bufsize);
}
else
@@ -2797,6 +2800,8 @@ static int luacall_gzip_deflate(lua_State *L)
uzs->zs.avail_in = (uInt)l;
}
size_t bufchunk = BUFMIN + (argc>=3 ? luaL_checkinteger(L,3) : l/2);
size_t increment = bufchunk / 2;
if (increment < Z_DEFL_BUF_INCREMENT) increment = Z_DEFL_BUF_INCREMENT;
do
{
@@ -2804,7 +2809,7 @@ static int luacall_gzip_deflate(lua_State *L)
{
if (buf)
{
bufsize += Z_DEFL_BUF_INCREMENT;
bufsize += increment;
newbuf = realloc(buf, bufsize);
}
else