News for hackers. Stuff that matters.
Re:Show HN by lifthrasiir on Saturday December 03, 2022 @12:18PM (#33845130)
Most memory allocators have an internal fragmentation which removes most efficiency gained by zero-termination. In fact it's worse, because zero-termination means that deallocation can't take a size parameter and it can often cause a performance hit for many modern allocators due to cache misses [1].

[1] https://isocpp.org/files/papers/n3778.html

Re:Show HN by jstimpfle on Saturday December 03, 2022 @06:39PM (#33848720)
zero-terminated says nothing about allocation, so there's that.
Re:Show HN by lifthrasiir on Saturday December 03, 2022 @07:14PM (#33849000)
You were talking about [space] efficiency for small strings, which is inherently related to the memory allocation scheme.
Re:Show HN by jstimpfle on Saturday December 03, 2022 @08:01PM (#33849357)
What? You can allocate zero-terminated strings in .rodata by typing "a string literal" in source code, for example. It's fair to say that there's no fragmentation or whatever and you don't have to think about deallocation either.

Other popular approaches to allocate strings dynamically would generally group strings of similar lifetime or by size, amortizing possible overheads over many strings.

If your favorite memory allocator requires a size field to support efficient deallocation, then by all means put that in the allocation record. But this is totally orthogonal to the format of a simple string representation.