<!-- ##### SECTION Title ##### -->
Trash Stacks

<!-- ##### SECTION Short_Description ##### -->
maintain a stack of unused allocated memory chunks.

<!-- ##### SECTION Long_Description ##### -->
<para>
A #GTrashStack is an efficient way to keep a stack of unused allocated
memory chunks. Each memory chunk is required to be large enough to hold
a #gpointer. This allows the stack to be maintained without any space
overhead, since the stack pointers can be stored inside the memory chunks.
</para>
<para>
There is no function to create a #GTrashStack. A %NULL #GTrashStack* 
is a perfectly valid empty stack.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### STRUCT GTrashStack ##### -->
<para>
Each piece of memory that is pushed onto the stack
is cast to a <structname>GTrashStack*</structname>.
</para>

@next: pointer to the previous element of the stack,
gets stored in the first <literal>sizeof (gpointer)</literal>
bytes of the element.

<!-- ##### FUNCTION g_trash_stack_push ##### -->
<para>
Pushes a piece of memory onto a #GTrashStack.
</para>

@stack_p: a pointer to a #GTrashStack.
@data_p: the piece of memory to push on the stack.


<!-- ##### FUNCTION g_trash_stack_pop ##### -->
<para>
Pops a piece of memory off a #GTrashStack.
</para>

@stack_p: a pointer to a #GTrashStack.
@Returns: the element at the top of the stack.


<!-- ##### FUNCTION g_trash_stack_peek ##### -->
<para>
Returns the element at the top of a #GTrashStack.
</para>

@stack_p: a pointer to a #GTrashStack.
@Returns: the element at the top of the stack.


<!-- ##### FUNCTION g_trash_stack_height ##### -->
<para>
Returns the height of a #GTrashStack.
</para>

@stack_p: a pointer to a #GTrashStack.
@Returns: the height of the stack.


