Стандартные библиотечные функции типа 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 в цикле
Но компилятору виднее, сейчас они умные) возможно в итоге будет сгенерирован один и тот же код в обоих случаях.
>и посчитай количество тактов, затраченных на исполнение. Там, где меньше - там быстрее.
С современными процессорами это почти нереально сделать, тем более если используются циклы.
ИМХО самый правильный вариант - это использования профилировщика. Грубо говоря, продвинутые замеры времени)