|
|
|
|
|
by vardump
3779 days ago
|
|
Of course you shouldn't optimize unless it's the biggest bottleneck and more performance (or battery life) is desired. C string operations might have been elegant 40 years ago, but nowadays they're like rerouting a 747 to check if office lights are on. Strlen is doing a lot of work for little benefit. It does slow and power hungry memory accesses. Because it's scanning for terminating 0x00 byte, it needs to contain a branch -- and loop terminating branch must be a costly mis-predicted one. C printf and friends are even more insane. It scans "bytecode" instructions from a string and does dynamic formatting. You can do format options like this: printf("% 0#*.*f\n", 15, 5, 1.234);
Or say print five chars of an unterminated string, left padded to total length of 10: printf("%10.5s\n", unterminated_str);
It won't (at least it shouldn't) crash even if 6th character is on an unreadable memory page. |
|
The last example is explicitly defined in the Standard.