man wnmem (Fonctions bibliothèques) - grouping memory allocator

NAME

wn_free, wn_gperrfpush, wn_gperrfpop, wn_gpmake, wn_gpfree, wn_gppush, wn_gppop, wn_curgp, wn_defaultgp, wn_alloc, wn_zalloc, wn_realloc, wn_zrealloc - grouping memory allocator

SYNOPSIS

#include <wn/wnmem.h>

void wn_gpmake(char parms[])

void wn_gpfree(void)

void wn_gppush(wn_memgp group);

void wn_gppop(void)

wn_memgp wn_curgp(void)

wn_memgp wn_defaultgp(void)

ptr wn_alloc(int size)

ptr wn_zalloc(int size)

void wn_realloc(ptr &p,int old_size,int new_size)

void wn_zrealloc(ptr &p,int old_size,int new_size)

void wn_free(ptr p)

void wn_gperrfpush(void (*perror_func)(void));

void wn_gperrfpop(void)

DESCRIPTION

This package is a memory allocator designed to replace the malloc(3) package provided by UNIX. It is designed to be faster and easier to program.

All memory comes from a "memory group", which can be declared using the type "wn_memgp". wnmem keeps a stack of memory groups. The top of this stack is called the "current memory group" and can be accessed using wn_curgp. All memory is allocated from and freed to the current memory group. The current memory group is NULL until a wn_gppush or wn_gpmake is done.

wn_gppush pushes group onto the memory group stack.

wn_gppop pops the memory group stack.

wn_gpmake makes a memory group of type specified by parms and pushes it onto the memory group stack. parms is a string with the following syntax:

parms --> free_method chunk_size

free_method --> "no_free"|"general_free"

chunk_size --> <non-negative integer>|<empty>

"free method" controls how wn_free works. "no_free" means that wn_free does nothing. "no_free" groups run much faster and waste less space. "general_free" groups allow piecemeal freeing with wn_free. Note that wn_gpfree works for both types of groups. "chunk_size" is the size of the memory chunk that wnmem requests from the system. The default is 4000, which is a good choice unless you have many small groups. Giving 0 causes the smallest chunk possible to be requested.

Some example wn_gpmake calls follow:

wn_gpmake("no_free");

wn_gpmake("general_free");

wn_gpmake("no_free 100");

wn_gpmake("no_free 0");

The memory group created by wn_gpmake is a subgroup of the current group. If a group is freed, all of its subgroups are freed. If the current group is NULL, the memory group is a subgroup of no other group.

wn_gpfree frees all of the memory in the current memory group, recursively frees its subgroups, invalidates the group, and then pops it from memory group stack.

wn_alloc allocates size bytes from the current memory group and returns a pointer to it.

wn_zalloc allocates size bytes from the current memory group and returns a pointer to it. The memory is guaranteed to be null initialized.

wn_free frees memory pointed to by p into the current memory group. This group must be the same group that p was allocated from or trouble will result. wn_free only works for "general_free" memory groups; it will do nothing for a "no_free" group.

wn_realloc changes the size of a block of memory referenced by p. p may be moved.

wn_zrealloc does the same as wn_realloc except that all extra memory allocated will be null initialized.

wn_curgp returns the current memory group.

wn_defaultgp returns the "default" memory group, which is a no_free group used for various system purposes.

DIAGNOSTICS

If memory is exhausted, the function provided to wn_gperrfpush is called. By default, this function prints a message and then crashes.

wn_alloc, wn_zalloc, and wn_free crash if the current memory group is NULL.

SEE ALSO

wnmemd doc/papers/memory_paper.txt

cc/low/examples.c

AUTHOR

Will Naylor

CETTE PAGE DOCUMENTE AUSSI :