`Bigstringaf` and `Core.Bytes`: performance and when to use each?

Bigstringaf has some claims about being super fast (and apparently achieves a lot of that through the use of “unsafe” calls). Some libraries, like lmdb, rely heavily on it, so that makes me think it might be close to the consensus choice for raw byte operations – but this might be just me not having a good grasp of the ecosystem.

Meanwhile, Core.Bytes has a very similar API that also does “unsafe” stuff but does so without requiring a specialized type so it feels like it should be much more interoperable and useful – but I may be missing something.

I’ve read somewhere that allocating “bytes” may not require a call to malloc while allocating a “bigstring” does so Bytes should be preferred for smaller operations, but I’m not sure this is true or where else would the allocation be happening if not through malloc or what I am missing.

Anyway, the question is simple: which one is faster?