Другие языки программирования и технологии

есть пару вопросов по программированию на С++

к примеру существует функция strcmp(const char, const char); которая сравнивает две строки.. . до того как я о ней узнал для сравнения строк я использовал цикл. теперь мне хотелось бы понять .. что больше экономит память и нагрузку на процессор ? .если говорить в сторону производительности кода то какой манёвр лучше всего использовать мой старый или через функцию ? .

теперь второй вопрос, есть функция strlen(const char); которая определяет длину строки. .

и вот я написаол ей альтернативу, чисто для себя будучи увереный что так будет экономичней. всё по минимуму и чисто по делу. .

и тут опять же вопрос что лучше использовать в плане производительности свой код или strlen ? .и вообще стоит ли мне и дальше изобретать велосипеды если я так помощен на оптимизации ???
Марат Каримов
Марат Каримов
1 158
Стандартные библиотечные функции типа strlen, strcmp и т. д. , как правило реализуются как можно эффективнее под большинство задач и обычно вставляются компилятором как built-in-функции.
Думаю, смысла самим реализовывать их нет, разве что сделать реализацию, которая заточена чисто под конкретную задачу.
Например в моей версии библиотеки C какой-то хитрый алгоритм на ассемблере со вставками SSE, хотя, есть и более простая версия на C. http://pastebin.com/b8v7BsWi

Например, твою функцию можно изменить так:
int len(char* Plen) {
char* tmp = Plen; // save begin
while(*Plen++!='\n')
;// do nothing
return Plen - tmp; // length = end - begin
}
Т. е. мы избавились от постоянного инкремента X в цикле

Но компилятору виднее, сейчас они умные) возможно в итоге будет сгенерирован один и тот же код в обоих случаях.

>и посчитай количество тактов, затраченных на исполнение. Там, где меньше - там быстрее.
С современными процессорами это почти нереально сделать, тем более если используются циклы.
ИМХО самый правильный вариант - это использования профилировщика. Грубо говоря, продвинутые замеры времени)
ХД
Хасан Дедов
5 079
Лучший ответ
Проверять не пробовал?
Задай измерение миллиона рандомных строк со своей функцией, замерь время. Потом то же самое - для strlen
Ну, или смотри сгенерированный машинный код в обоих случаях и посчитай количество тактов, затраченных на исполнение. Там, где меньше - там быстрее.
Степан Гранат
Степан Гранат
5 579