A SWI-Prolog string represents a byte-string on the global stack. Its 
lifetime is the same as for compound terms and other data living on the 
global stack. Strings are not only a compound representation of text 
that is garbage-collected, but as they can contain 0-bytes, they can be 
used to contain arbitrary C-data structures. However, it is generally 
preferred to use blobs for storing arbitrary C-data structures (see also PlTerm_pointer(void 
*ptr)).