Сделал простенький тест:
LPCSTR pTest1 = "http://www.boressoft.ru:80/cgi-bin/text.cgi?test=1&text=2";
LPCSTR pTest2 = "http://www.boressoft.ru:80/cgi-bin/text.cgi?test=1&text=2";
for (USHORT i = 0; i < 65500; i++)
{
strnlen(pTest1, _MAX_PATH);
strcmp(pTest1, pTest2);
strlen(pTest1);
}
return 0;
И замерил время выполнения (edge time) при помощи Intel VTune 8.0:
strlen — 3 306
strcmp — 7 443
strnlen — 16 292
Кто-нибудь может мне объяснить, что такого там делает strnlen, что по времени выполнения она проигрывает даже strcmp, которой надо не просто бежать по строке, а ещё и сравнивать с другой строкой?
Дорогая какая-то буква n получается...