Хороший пример...Katerina писал(а): А скажите пожалуйста какой из этих способов предпочтительнее и почему? Я нашла такой пример. Отличие по времени выполнения(если компилировать без каких либо доп. ключей с учетом особенностей архитектуры процессора) практически на порядок.
Начиная с того, что он безграмотный :
Потому как показанные там строки ну никак не могут быть Unicode, это сказано для красного словца из непонимания что такое Unicode вообще ... там как раз ASCII строки, char*, а вот если бы там были и именно Unicode строки, то картина перевернулась бы с точностью до наоборот...Title Best way to get last char in unicode null terminated string
А по существу:
- функция strlen(), как и всякая библиотечная функция C, включает в себя какие-то входные проверки, корректность допустимых данных и т.п.
- простое инкрементирование указателя может вполне быть быстрее ... на мизерных интервалах
- а то что "на порядок" - так это вы спишите на неточность измерений времени! Нельзя в системе корректно мерять временные интервалы с точностью, намного меньше системного тика, который в Linux обычно 1 мсек. ... а в некоторых WIndows может быть и 13 мс. (кстати, в какой это системе вы измеряли?)
- да и все эти соотношения времени выполнения поплывут при изменении уровня оптимизации компилятора ... и неизвестно в какую сторону, и при смене компилятора ...
Пример хорош тем, что он иллюстрирует, что:
- не стоит даже заморачиваться на экономию по-мелочам...
- а на микроинтервалах - это вообще "вилами по воде"...
- экономить надо на вычислительной сложности алгоритмов, вот том O(N) ... которое если O(10^N) - то никакое "улучшение производительности" вас не спасёт.