Почему двойной цикл while выполняется быстрее, чем единственный цикл while, несмотря на то, что он делает одно и то же? - PullRequest
0 голосов
/ 19 сентября 2019

«ptr» указывает на файл, отображенный в памяти (wavefront .obj)

const char* ptr = data;
while (*ptr != '\0') {
    while (*ptr != '\0') {
        if (*ptr == 'v') {
            ptr++;
            if (*ptr == ' ') {
                vertex_count++;
                ptr += 27;
            }
            else if (*ptr == 't') {
                tex_coord_count++;
                ptr += 18;
            }
            else if (*ptr == 'n') {
                normal_count++;
                ptr += 21;
            }
        }
        else if (*ptr == 'f') {
            ptr++;
            if (*ptr == ' ') {
                index_count += 3;
                ptr += 17;
            }
        }
        ptr++;
    }
}
printf("v == %i\nvt == %i\nvn == %i\nf == %i\n", vertex_count, tex_coord_count, normal_count, index_count);

Для выполнения этой функции требуется от 490 мс до 520 мс, а

const char* ptr = data;
while (*ptr != '\0') {
    if (*ptr == 'v') {
        ptr++;
        if (*ptr == ' ') {
            vertex_count++;
            ptr += 27;
        }
        else if (*ptr == 't') {
            tex_coord_count++;
            ptr += 18;
        }
        else if (*ptr == 'n') {
            normal_count++;
            ptr += 21;
        }
    }
    else if (*ptr == 'f') {
        ptr++;
        if (*ptr == ' ') {
            index_count += 3;
            ptr += 17;
        }
    }
    ptr++;
}
printf("v == %i\nvt == %i\nvn == %i\nf == %i\n", vertex_count, tex_coord_count, normal_count, index_count);

начинается с 580 мс идоходит до 610мс.Есть ли какая-то причина для этого?

Я использую VS2017 с конфигурацией выпуска x64 для отладчика, и результаты выглядят довольно согласованными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...