С недавнего(к своему стыду) времени начал интересоваться STL. До этого делал свои "велосипеды". Начал делать новый проект и тут же возник вопрос: стоит ли везде применять string? То есть если строка, к примеру, константа — стоит ее упаковывать в string? Не будет снижения производительности? Вопрос актуальный, потому что будет работать 1000+ потоков.
A> Это понятно. Однако интересует сам вопрос как таковой. Зачем тратить время на ненужные операции.
Есть основания полагать, что синхронизация доступа между 1000+ потоков будет меньше влиять, чем представление строк?
Нужно знать, как минимум:
— строки изменяемые или нет
— количество строк
— средний размер строки
— количество читателей/писателей в эти строки
Здравствуйте, asmerdev, Вы писали:
A>Приветствую, коллеги.
A>С недавнего(к своему стыду) времени начал интересоваться STL. До этого делал свои "велосипеды". Начал делать новый проект и тут же возник вопрос: стоит ли везде применять string? То есть если строка, к примеру, константа — стоит ее упаковывать в string? Не будет снижения производительности? Вопрос актуальный, потому что будет работать 1000+ потоков.
Ты хочешь сказать, что среди твоих велосипедов не было класса строки? И как ты все, strdup/strcat фигачил?
On 12.12.2012 13:42, asmerdev wrote:
> Начал делать новый проект и тут же возник > вопрос: стоит ли везде применять string?
Не стоит. Надо смотреть по ситуации.
> То есть если строка, к примеру, > константа — стоит ее упаковывать в string?
Не стоит. Надо смотреть по ситуации.
> Не будет снижения > производительности?
Все зависит от тебя. Можно и с указателями все хорошо написать, можно и
со стрингами.
On 12.12.2012 13:51, Brutalix wrote:
> Сначала напиши как проще и понятней, потом выясни где тормозит. овер > 9000 шанс что это будут не строки.
Ты самонадеян. А я один раз такой именно код и наблюдал — было ощущение,
что чел специально код замедлил в 100 раз, когда ему сказали, чтобы на
"голых" указателях код не писал.
Здравствуйте, asmerdev, Вы писали:
A>стоит ли везде применять string?
Везде точно не стоит. Общего ответа не существует, в каждом конкретном случае решать тебе, но ты же похоже представляешь, во что это может вылиться. Иногда можно работать как со string, обойдясь без копирования:
Здравствуйте, Vzhyk, Вы писали:
V>что чел специально код замедлил в 100 раз, когда ему сказали, чтобы на
Все бывает. Я, например, видел как длинна строки которую можно задать константой, высчитывалась, причем в тройном вложенном цикле.
Однако, как мне мой скромный опыт подсказывает — экономия на спичках — особенно в процессе написания чего-то более менее сложного как правило не окупается.
Здравствуйте, asmerdev, Вы писали:
A>С недавнего(к своему стыду) времени начал интересоваться STL. До этого делал свои "велосипеды". Начал делать новый проект и тут же возник вопрос: стоит ли везде применять string?
On 12.12.2012 14:39, Brutalix wrote:
> Однако, как мне мой скромный опыт подсказывает — экономия на спичках — > особенно в процессе написания чего-то более менее сложного как правило > не окупается.
Конечно нет. Но у ТС был вопрос замедлится или нет. Я и привел пример,
когда замедлилась в сотни раз (правда сами string или char* были не причем).
Здравствуйте, Vzhyk, Вы писали:
V>Конечно нет. Но у ТС был вопрос замедлится или нет. Я и привел пример,
не обязательно что замедлится. даже вынося за скобки скорость программо написания, и смотря только на скорость выполнения написанного — самописный чар* идеализировать не стоит. особенно если что то чуть более сложное делать чем простой хелло ворд хранить. стл довольно хорошо написан, и вполне может получится быстрее чем самописный чар*
Здравствуйте, dr. Acula, Вы писали:
A>> Это понятно. Однако интересует сам вопрос как таковой. Зачем тратить время на ненужные операции. DA>Есть основания полагать, что синхронизация доступа между 1000+ потоков будет меньше влиять, чем представление строк?
malloc() — очень медленная операция, даже если его зовут новомодным словом new[]
Постоянное конструирование string'ов может дорого стоить. И вопрос о синхронизации там тоже возникнет, т.к. куча будет делиться между всеми потоками (даже если в ее реализации используются для ускорения попоточные пулы).
On 12.12.2012 15:32, Pzz wrote:
> Постоянное конструирование string'ов может дорого стоить.
То бишь для С строк память не выделяете?
> И вопрос о > синхронизации там тоже возникнет, т.к. куча будет делиться между всеми > потоками (даже если в ее реализации используются для ускорения > попоточные пулы).
А с указателями вопрос синхронизации не возникнет?
Всем спасибо за ответы, кое что прояснилось. Дело в том, что у меня прямо таки маниакальная привычка делать все унифицировано. То есть если уж использовать string, то везде, чтобы везде все подходило. Поэтому и вопрос такой возник.
Здравствуйте, Vzhyk, Вы писали:
>> Постоянное конструирование string'ов может дорого стоить. V>То бишь для С строк память не выделяете?
Ну, смотря откуда эти строки берутся. Можно ведь по-разному память выделять, и статически, и одним куском на совокупность данных, и т.д. и т.п.
V>А с указателями вопрос синхронизации не возникнет?
Опять же, зависит от использования. А вот использование string, даже локального в потоке, с хорошей вероятностью приведет к необходимости синхронизации при обращении к куче.
On 12.12.2012 16:02, Pzz wrote:
> Ну, смотря откуда эти строки берутся. Можно ведь по-разному память > выделять, и статически, и одним куском на совокупность данных, и т.д. и т.п.
Вот и подумай над конструированием стрингов в контексте, написанного тобой.
> V>А с указателями вопрос синхронизации не возникнет? > Опять же, зависит от использования.
Понятно.