Для начала, это бесполезно для кодировок, таких как UTF-8 ... то есть вычисление количества символов в строке UTF-8 является более сложным, тогда как число байтов, конечно, так же легко вычислить как, скажем, в строке ASCII.
В целом, вы можете оптимизировать работу на некоторых платформах, читая в большие регистры. Поскольку другие ссылки, опубликованные до сих пор, не имеют такого примера, вот немного псевдопсевдокода для нижнего порядкового номера:
int size = 0;
int x;
int *caststring = (int *) yourstring;
while (int x = *caststring++) {
if (!(x & 0xff)) /* first byte in this int-sized package is 0 */ return size;
else if (!(x & 0xff00)) /* second byte etc. */ return size+1;
/* rinse and repeat depending on target architecture, i.e. twice more for 32 bit */
size += sizeof (int);
}