Dynamic buffers versus descriptors, arrays and heap cells

Explains the difference between various types of buffers.

The essential difference between dynamic buffers and more straightforward means of storing binary data is that C arrays and descriptors provide essentially non-extensible buffers. Any attempt to write beyond the end of a C array results in undefined (and usually disastrous) consequences. Any attempt to write beyond the end of a descriptor results in a panic.

Heap cells may be extended, but not without limit; it may be impossible to extend a heap cell further, because the heap is exhausted, or too fragmented to permit the extension. In addition, if heap cell re-allocation results in movement of the cell, re-allocation can be unduly expensive. If re-allocation is undesirable, then a buffer could be extended by allocating a new segment in a new allocation cell. Segmented buffers have this behaviour: flat buffers use re-allocation alone.