Implementation of data stack which can be used to allocate memory from
the stack. Basicly SilcStack is a pre-allocated memory pool system
which allows fast memory allocation for routines and applications that
frequently allocate small amounts of memory. Other advantage of this
system is that there are no memory leaks, as long as the stack is
freed eventually. Since the stack is usually allocated only once this
is not an issue.
SilcStack can be used to allocate both aligned and unaligned memory so
it is suitable for allocating structures and is optimal for allocating
strings and data buffers. SilcStack also supports stack pushing and
popping allowing to push the stack, allocate memory and then pop it
to free the allocated memory. The freeing does not actually do any
real memory freeing so it is optimized for performance.
A basic set of utility functions are provided for application that wish
to use the SilcStack as their primary memory allocation source. The
following functions support SilcStack:
silc_smalloc, silc_smalloc_ua, silc_scalloc, silc_srealloc, silc_smemdup,
silc_sstrdup, silc_buffer_salloc, silc_buffer_salloc_size,
silc_buffer_srealloc, silc_buffer_srealloc_size, silc_buffer_scopy,
silc_buffer_sclone, silc_buffer_sformat, silc_buffer_sformat_vp,
silc_buffer_sstrformat, silc_buffer_senlarge, silc_mp_sinit
The data stack is not thread-safe. If the same stack context must be
used in multithreaded environment concurrency control must be employed.
Each thread should allocate their own SilcStack.