ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Хэш-таблицы в nginx



On Tue, 25 Jul 2006, Andrei Nigmatulin wrote:

On Tuesday 25 July 2006 20:20, Igor Sysoev wrote:
On Tue, 25 Jul 2006, Konstantin Sorokin wrote:
Игорь, а я правильно понимаю, что судя по (src/core/ngx_hash.c)

if (names[n].key.len >= 255) {
   ngx_log_error(NGX_LOG_EMERG, hinit->pool->log, 0,
       "the \"%V\" value to hash is to long: %uz bytes, "
       "the maximum length can be 255 bytes only",
       &names[n].key, names[n].key.len);
   return NGX_ERROR;
}

Длина ключа в nginx'овой хэш-таблице не может быть больше 255 ? А почему
так ? Что может поломаться, если это увеличить ?

Потому что корзина устроена так:

void*   указатель
u_char  длина ключа1
u_char  ключ1[длина]
u-char  выравнивание до указателя

void*   указатель
u_char  длина ключа2
u_char  ключ2[длина]
u-char  выравнивание до указателя

В этом случае можно использовать неиспользуемые младшие биты указателя для
расширения длины ключа.

Два бита из указателя уже используются для wildcard-хэша.
Но вообще, ограничение в 255 сивмолов - это ограничения для ключа, а не
для значения.


Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.