News for hackers. Stuff that matters.
Re:Show HN by jbverschoor on Saturday December 03, 2022 @11:01AM (#33844407)
Well you could easily use the first 4 bits to indicate how many bytes the length is + 1.

      c0 (0b0000) -> length is 0xc = 12
    1341 (0b0001) -> length is 0x134 = 69,940
  239a42 (0b0010) -> length is 0x239a42 = 145,828

  deadbeaf239a47 (0b0111) -> length is 0xdeadbeaf239a4 = 3917404957718948.
This gets you a 7-byte = 56bit number, minimal overhead for smaller strings.

Maybe reserve 0x1111 for future use.

Maybe the other endian makes more sense here, and maybe 0 should mean zero-length.

It's probably not very performant compared to other solutions, but you can just shift 4 bits, and you're done

I'm curious how many strings are allocated at a particular point in time (across everything, kernel, os, apps, etc)

Re:Show HN by jstimpfle on Saturday December 03, 2022 @11:11AM (#33844479)
These considerations can make sense when thinking about storage formats (probably you want to compress the string too), but they are not convenient for in-memory representation where you want to get the location of the first character with a simple member access.
Re:Show HN by jbverschoor on Saturday December 03, 2022 @11:24AM (#33844570)
It starts at the start of the frame + the first nibble + 1