|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Andrew Kant 2:469/83.1 17 Dec 2007 17:51:26 To : Sergey Khvatov Subject : Злостный оффтопик - быстрая конкатенац ия строк -------------------------------------------------------------------------------- Monday December 17 2007 15:40, Sergey Khvatov wrote to Victor Krapivin: >>> Hарод, сорри, больше по быстрому спросить негде, никто в детстве >>> низкоуровневым или ядерным программированием не развлекался? Hадо >>> преобразовать строку, заменив русские символы на коды вида &2432; >>> Проблема в том, что это надо делать быстро, функция sprintf слишком >>> тормозная, как все универсальное. VK>> char* to_html_form(char* s, char c) VK>> { VK>> *s++ = '&'; VK>> *s++ = (int)c / 100 + '0'; VK>> *s++ = ((int)c / 10) % 10 + '0'; VK>> *s++ = (int)c % 10 + '0'; VK>> *s++ = ';'; VK>> return s; VK>> } VK>> Hа multibyte (или wchar_t) переведешь самостоятельно. Принцип тот VK>> же. SK> Теперь собери всё это и сравни с sprintf - удивишься. Да, твой способ SK> быстрее, но разница незначительна. Быстрее чем работает процессор ты все равно не сможешь. Можно немного оптимизировать _этот_ кусок под твой процессор, но наверняка основные тормоза не в нем - здесь все предельно просто, обычная арифметика, проблемы наверняка возникают не тут, а в динамическом распределении памяти под строки и копировании туда-сюда. SK> Особенно если результат нужен чтобы в конце концов его SK> куда-нибудь вывести. Этот кусок работает одинаково быстро (или медленно :) независимо от того, где нужен его результат :) PS если тебе так интересно, что тормозит - возьми какой-нибудь профилер и проверь, а то пока-что только голословные утверждения... Good bye! Andrew --- GoldED+/W32 1.1.4.7 * Origin: * KAA * (2:469/83.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/228947668e30.html, оценка из 5, голосов 10
|