On Monday, 27 June 2016 at 06:31:49 UTC, Ola Fosheim Grøstad
On Monday, 27 June 2016 at 05:27:12 UTC, chmike wrote:
Ending strings with a single null byte/char is to save space.
It was critical in the 70´s when C was created and memory
space was very limited. That's not the case anymore and I
Not only to save space, some CPUs also had cheap incrementing
load/stores and branching on zero is faster than sacrificing
another register for a counter.
I incidentally just found my 1992 implementation for Motorola
68K, to illustrate:
move.l 4(sp),a1 ; pointer for destination
move.l 8(sp),a0 ; pointer for source
mystrcpy move.l a0,d0
1$ move.b (a0)+,(a1)+ ; copy
bne.s 1$ ; jump back up if not zero
As you can see it is a tight loop. Other CPUs are even tighter,
and have single-instruction loops (even 8086?)
So not only storage, also performance on specific CPUs. Which is
a good reason for keeping datatypes in standard libraries
abstract, different CPUs favour different representations. Even
on very basic datatypes.