After calling this function the CIovec shares the underlying
byte buffer with the original ByteString. Thus, modifying the
CIovec either in C or using poke will cause the contents of
the ByteString to change, breaking referential transparency.
Other ByteStrings created by sharing (such as those produced
via take or drop) will also reflect these changes.

Also, even though the CIovec shares the underlying byte
buffer, it does so in a way that will not keep the original
ByteString alive with respect to garbage collection. Thus, the
byte buffer could be collected out from under the CIovec. To
prevent this, you must use touchByteString after the last point
where the CIovec is needed.