Быстрая strncpy
8 Ноябрь 2006 13:22 by MaximeБыстрая реализация функции strncpy а-ля Duff’s device:
void * dps_strncpy(void *dst0, const void *src0, size_t length) {
if (length) {
register size_t n = (length + 7) / 8;
register char *dst = dst0, *src = src0;
switch( length % 8 ) {
case 0: do { if (!(*dst++ = *src++)) break;
case 7: if (!(*dst++ = *src++)) break;
case 6: if (!(*dst++ = *src++)) break;
case 5: if (!(*dst++ = *src++)) break;
case 4: if (!(*dst++ = *src++)) break;
case 3: if (!(*dst++ = *src++)) break;
case 2: if (!(*dst++ = *src++)) break;
case 1: if (!(*dst++ = *src++)) break;
} while(--n > 0);
}
}
return dst0;
}
ЗЫ: код под GPL.
Кстати, реализация strncpy в libc во FreeBSD 5.3, если длина src0 короче length байт, добивает dst0 до length байт нулями — некузяво с точки зрения производительности.
Popularity: 7%
Похожие записи
- Еще более быстрая strncpy
- Быстрая memcpy
- Исправленная быстрая strncpy
- Еще более быстрая memcpy
- Быстрая strlen
| В Мой Мир |
|

Декабрь 9th, 2009 at 13:59
[...] более быстрый вариант функции strncpy а-ля Duff’s device (предыдущий вариант). Результаты сравнения времени выполнения теста, [...]