есть простенькая задача: нужно все буквы в строке привести к нижнему регитсру. реализация до безобразия проста
void func1(char *c_str, int len)
{
char *c_str_end;
c_str_end = c_str + len;
while(c_str < c_str_end){
*c_str++ |= 0x20;
}
}
но я так понимаю, каждый раз процессору я подсовываю 8 бит (char) для обработки, хотя процессор способен за такт сделать операцию над 32 битами. не буду вдаваться в технические дебри и выяснять, как процессор использует свободные биты и чем их заполняет. очевидно, что в данной задаче возможности процессора используются не полностью. Было бы лучше процессору подсовывать на обработку 32 бита (int). Для этого строку нужно преобразовать к int, и пробежать по елементам массива, накладывая соответствующую маску 0x20202020. Есть загвоздка, хорошо, если длина строки кратна 4 или sizeof(int). Но, если длина строки не кратна 4, то, накладывая маску, можно повредить данные за пределами вверенной мне области памяти. Поэтому, как не крути, оставшиеся байты придется перебрать в цикле как char и наложить соответствующую маску 0х20. вот реализация:
void func2(char *c_str, int len)
{
int *i_str, *i_str_end;
char *c_str_end;
i_str = (int*)c_str;
i_str_end = i_str + (int)(len/sizeof(int));
while(i_str<i_str_end){
*i_str++ |= 0x20202020;
}
c_str = (char*)i_str_end;
c_str_end = c_str + len%sizeof(int);
while(c_str<c_str_end){
*c_str++ |= 0x20;
}
}
Внимание вопрос: верны ли мои размышления, будет ли вторая функция работать быстрее, чем первая? при какой длине строки вторая функция будет работать быстрее ?
Ответ на:
комментарий
от DKorolkov
Ответ на:
комментарий
от DKorolkov
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум QRegExp не работает (2015)
- Форум Слежение за изменениями в директории через inotify (2016)
- Форум nfqueue вытащить данные пакете (2012)
- Форум Битовые операции (2018)
- Форум Networking -> netlink/rtnetlink -> routing (2018)
- Форум shell + битовые операции. (2006)
- Форум Проблема с сокетами (2011)
- Форум Книга про битовые операции (2013)
- Форум Enum и битовые операции (2014)
- Форум Вопрос по битовым операциям. (2003)