Hello Anton,
Friday, May 4, 2007, 8:41:08 PM, you wrote:
> Hello Mykola,
> You wrote on Friday, May 4, 2007, 5:18:26 PM:
MZ>> Начало цитаты:
MZ>>     if (m[1] == 'O') {
MZ>>         if (m[0] == 'P' && m[2] == 'S' && m[3] == 'T') {
MZ>>             r->method = NGX_HTTP_POST;
MZ>>             break;
MZ>>         }
MZ>>         if (m[0] == 'C' && m[2] == 'P' && m[3] == 'Y') {
MZ>>             r->method = NGX_HTTP_COPY;
MZ>>             break;
MZ>>         }
MZ>>     ...
MZ>> That's a man who cares about performance.
MZ>> Конец цитаты.
MZ>> Я не спец в C, и не читал той дискуссии по strncmp, но по моему
MZ>> проверять 2-й байт, а потом 1-й - не самый оптимальный шаблон доступа к
MZ>> памяти
> С точки зрения скорости доступа к памяти без разницы в каком порядке,
> лишь бы данные были там рядом.
> Если повезет и они выровнены, как нужно то данные за один прием попадут
> в кэш процессора. Не повезет - в два.
> А количество сравнений получается меньше если сначала 2-й байт
> проверить, потом 1-й.
первый мой пост был не правилен.
вот более правильные результаты:
nginx_method.c (добавлен дополнительный if):
int
main (void)
{
    char m[] = "POST";
    if (m[1] == 'O')
        if (m[0] == 'P' && m[2] == 'S' && m[3] == 'T')
            printf ("OK\n");
}
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");
}
--- 0w_method.s 2007-05-04 21:14:09.000000000 +0700
+++ nginx_method.s      2007-05-04 21:19:40.000000000 +0700
@@ -1,4 +1,4 @@
-       .file   "0w_method.c"
+       .file   "nginx_method.c"
        .section        .rodata.str1.1,"aMS",@progbits,1
 .LC0:
        .string "POST"
@@ -12,18 +12,25 @@
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
-       andl    $-16, %esp
        movl    .LC0, %edx
+       andl    $-16, %esp
+       movl    %edx, -24(%ebp)
        subl    $16, %esp
        movb    .LC0+4, %al
-       cmpl    $1414745936, %edx
-       movl    %edx, -24(%ebp)
+       cmpb    $79, -23(%ebp)
        movb    %al, -20(%ebp)
-       je      .L4
+       je      .L5
+.L2:
        leave
        ret
        .p2align 2,,3
-.L4:
+.L5:
+       cmpb    $80, -24(%ebp)
+       jne     .L2
+       cmpb    $83, -22(%ebp)
+       jne     .L2
+       cmpb    $84, -21(%ebp)
+       jne     .L2
        subl    $12, %esp
        pushl   $.LC1
        call    puts
--
Best regards,
 Denis                            mailto:denis@xxxxxxxxxx