0xd34df00d
17.01.2013 13:14 Azoth_primary
std::find отсасывает у strchr с проглотом (4.8 секунды против 0.79). Хотя, казалось бы, инлайн, оптимизации компилятора и все такое.
std::find отсасывает у strchr с проглотом (4.8 секунды против 0.79). Хотя, казалось бы, инлайн, оптимизации компилятора и все такое.
Инлайн, кстати, не гарантирует того, что он реально будет. Зависит от коноплятора емнип
покажи тесты или GTFO
код в студию1
NDA
Хуестами. Сравнивал высер vtune'а для двух разных имплементаций одной очень часто вызываемой функции.
тогда сасай
напедаллировал говно, даже не знаешь где у тебя проблема
Че.
благородный дон пытался донести до вас своё понимание корня проблемы.
не могу не подметить рационального зерна в его рассуждениях
ты опять ромашкового ебанул?
Могу, разве что, показать
vs
а ты думал. Сраные шаблоны.
Казалось бы, причем тут шаблоны.
std::find разве не из STL родом?
Да, но шаблоны-то тут причем? У меня есть подозрение, что strchr реализован с ручными ассемблерными вставками и проверяет несколько байт за раз, например, или еще какую современную процессорную магию применяет. Инстанциация std::find для char* тоже могла бы так делать, но компилятор слишком туп.
ок, что и где ты ищешь? символ в строке? локали отключил?
Да, символ в строчке. Мне из строки `[eqgbplf` надо сделать строку `хуйпизда`. Для сего есть
static const char qwerty[] = "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>";
static const StrUTF8 ycuken ("йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ");
Чочо за локали отключать?
Похоже на то.
это ж пунтосвитчер! скачай сорсы линуховой такой фигни и посмотри как там
Я не думаю, что у них стояла задача поддерживать сотни тыщ таких преобразований в секунду, поэтому они вряд ли стараются написать все максимально эффективно.
интересно, где ты здесь применил strchr...
и что тебе мешает эту задачу решать на таблице
Для поиска позиции символа в первом массиве.
Че.
таблица char → char
Какая таблица? И как ты лукап по такой таблице ты сделаешь быстрее, чем поиск символа в первом массиве и выбор второго с таким же смещением?
в таблице индекс — входной символ, содержимое — выходной
быстрее, т.к. не будет поиска, вообще
Набросай позязя код, я не понимаю твою идею.
char convertion_table[256]= "....";
for(int i = 0; i < s.length(); i++)
s[i] = convertion_table[s[i]];
я не ебу, что у тебя за StrUTF8, но для cp1251 таблица будет выглядеть как char tablitsa[] = { 0, 1, 2, …, .['q'] = 'й', .['w'] = 'ц', .['й'] = 'й', …}; char force[sizeof(tablitsa) == 256 ? 1 : -1]; … *out++ = tablitsa[*in++];
А, окай. Только 512 в моем случае, ибо русский язык двухбайтовый.
У меня utf8, но общий смысл понятен, спасибо. Не хотелось просто делать такую sparse-хуйню.
от этого у тебя меняется тип элементов в таблице, а не её размер. можешь сделать int tbl[] и поставить 0 там где нужно эквивалентное преобразование, чтобы не париться. тогда в коде придётся меньше писать (если на c99)
разреж на несколько диапазонов, хотя ты тут начнешь троговать раму на быстродействие
ну а в остальных местах таблицы — codepoint писать
ну и да, чтобы сделать минимум проверок, придётся таблицу сделать размером в четыре мегабайта, зато на проце прокешируется нормально
Да мне посрать на раму вообще, тут CPU важнее.
Я просто одной строкой хотел задать и не париться. Впрочем, это и щас можно сделать неявно.
Пойду напишу таблицегенератор на хачкеле.
Олсо, чочо расскажи про c99, а то я опять туплю, чо ты имеешь ввиду.
синтаксис инициализации массивов вида char tbl[] = {.['q'] = 'й'}; появился только в c99, насчёт c++11 не уверен
Охуеть, я не знал. В C++11 такого не видел. Думал, это псевдокод у тебя.
кстати, тут как раз у тебя всё выглядеть будет красиво, можно задать таблицу явно как пары соответствия и проверять на каждый символ, что его значение меньше размера таблицы и в таблице для него лежит не ноль.
я попутал точка там не нужна. с точкой поля структуры инициализируются. и таки да. это C99 & C11 only feature. В плюсах годноты-то в принципе быть не может
КОКОКО эффективные специализации КОКОКО std::copy быстрее memcpy КОКОКО шаблоны stl КОКОКО КОКОКО
Питоноблядь закукарекала.
у страуструпа учился :]
Плохо научился, он дело говорит, а ты кукарек-кукарек.
ахахахах ну ты и шутишь прекрати
Я такой))))))))))))))))