Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Re[2]: guid to nginx internals
On Fri, 4 May 2007 21:13:46 +0700
"Denis F. Latypoff" <denis@xxxxxxxxxx> wrote:
> Есть две программы
>
> nginx_method.c:
>
> int
> main (void)
> {
> char m[] = "POST";
> if (m[1] == 'O')
> printf ("OK\n");
> }
>
Слишком короткая программа, должна быть ещё минимум одна проверка m[0]
на равность 'C' и вторая на равность 'P'
>
> 0W_method.c:
>
> #define STR4_POST 0x54534f50
>
> int
> main (void)
> {
> char m[] = "POST";
> unsigned int tmp4 = *(unsigned int *) m;
>
> if (tmp4 == STR4_POST)
> printf ("OK\n");
> }
А здесь должна быть ещё только одна проверка на равность 0x59504f43
В обоих случаях не учитывается распредение вероятностей получить тот
или иной метод во входящем запросе.
И в любом случае основная задержка пойдет на fetch данных из L1 или L2
Конечно, есть шанс что компилятор будет умным и загрузит m[] в регистр
достаточной длины, и будет его использовать как source для проверок
m[0..4] , но для этого придется использовать сдвиги, чтобы подготовить
данные для проверки
|