Mercurial > nand-ecoscentric
changeset 1918:537e623b6489
* cdl/memalloc.cdl: Added reference to documentation
* doc/memalloc.sgml: Basic user documentation.
| author | asl |
|---|---|
| date | Sun, 27 Mar 2005 12:28:26 +0000 |
| parents | 020986969d31 |
| children | 569bc58fc509 |
| files | packages/services/memalloc/common/current/ChangeLog packages/services/memalloc/common/current/cdl/memalloc.cdl packages/services/memalloc/common/current/doc/memalloc.sgml |
| diffstat | 3 files changed, 388 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/services/memalloc/common/current/ChangeLog +++ b/packages/services/memalloc/common/current/ChangeLog @@ -1,3 +1,8 @@ +2005-03-27 Andrew Lunn <andrew.lunn@ascom.ch> + + * cdl/memalloc.cdl: Added reference to documentation + * doc/memalloc.sgml: Basic user documentation. + 2004-10-04 Oyvind Harboe <oyvind.harboe@zylin.com> * src/dlmalloc.cxx (resize_alloc): No longer invoke
--- a/packages/services/memalloc/common/current/cdl/memalloc.cdl +++ b/packages/services/memalloc/common/current/cdl/memalloc.cdl @@ -54,6 +54,7 @@ cdl_package CYGPKG_MEMALLOC { This package provides memory allocator infrastructure required for dynamic memory allocators, including the ISO standard malloc interface. It also contains some sample implementations." + doc ref/memalloc.html include_dir cyg/memalloc compile dlmalloc.cxx memfixed.cxx memvar.cxx \ sepmeta.cxx debug.c
new file mode 100644 --- /dev/null +++ b/packages/services/memalloc/common/current/doc/memalloc.sgml @@ -0,0 +1,382 @@ +<!-- {{{ Banner --> + +<!-- =============================================================== --> +<!-- --> +<!-- memalloc.sgml --> +<!-- --> +<!-- eCos memory allocation support --> +<!-- --> +<!-- =============================================================== --> +<!-- ####COPYRIGHTBEGIN#### --> +<!-- --> +<!-- =============================================================== --> +<!-- Copyright (C) 2005 Andrew Lunn --> +<!-- This material may be distributed only subject to the terms --> +<!-- and conditions set forth in the Open Publication License, v1.0 --> +<!-- or later (the latest version is presently available at --> +<!-- http://www.opencontent.org/openpub/) --> +<!-- Distribution of the work or derivative of the work in any --> +<!-- standard (paper) book form is prohibited unless prior --> +<!-- permission obtained from the copyright holder --> +<!-- =============================================================== --> +<!-- --> +<!-- ####COPYRIGHTEND#### --> +<!-- =============================================================== --> +<!-- #####DESCRIPTIONBEGIN#### --> +<!-- This explains the memory allocation functions which were --> +<!-- origionally part of the KAPI, but there moved a long long time --> +<!-- ago. I used the old documentation as a basis, so credit should --> +<!-- realy go to somebody else --> +<!-- ####DESCRIPTIONEND#### --> +<!-- =============================================================== --> + +<!-- }}} --> + +<PART id="services-memalloc-common"> +<TITLE>Memory Allocation</TITLE> +<CHAPTER id="memalloc"> +<TITLE>eCos Memory Pools</TITLE> +<SECT1 id="ecos-memory-pools"> +<TITLE>eCos Memory pools</TITLE> + +<PARA> + There are three sorts of memory pools. A variable size memory pool + is for allocating blocks of any size. A fixed size memory pool, has + the block size specified when the pool is created and only provides + blocks of that size. Both of these pools must be explicitly created. + The third type is the traditional heap which can be accessed using + malloc and friends.</PARA> + + <refentry id="variable-pools"> + + <refmeta> + <refentrytitle>Variable Size Allocation Pools</refentrytitle> + </refmeta> + + <refnamediv> + <refname>cyg_mempool_var_create</refname> + <refname>cyg_mempool_var_delete</refname> + <refname>cyg_mempool_var_alloc</refname> + <refname>cyg_mempool_var_timed_alloc</refname> + <refname>cyg_mempool_var_try_alloc</refname> + <refname>cyg_mempool_var_free</refname> + <refname>cyg_mempool_var_waiting</refname> + <refname>cyg_mempool_var_get_info</refname> + <refpurpose>Variable Size Allocation Pools</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <funcsynopsis> + <funcsynopsisinfo> +#include <cyg/kernel/kapi.h> + </funcsynopsisinfo> + <funcprototype> + <funcdef>void <function>cyg_mempool_var_create</function></funcdef> + <paramdef>void* <parameter>base</parameter></paramdef> + <paramdef>cyg_uint32 <parameter>size</parameter></paramdef> + <paramdef>cyg_handle_t* <parameter>varpool</parameter></paramdef> + <paramdef>cyg_mempool_var* <parameter>var</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>cyg_mempool_var_delete</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void* <function>cyg_mempool_var_alloc</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + <paramdef>cyg_uint32 <parameter>size</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void* <function>cyg_mempool_var_timed_alloc</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + <paramdef>cyg_uint32 <parameter>size</parameter></paramdef> + <paramdef>cyg_tick_count_t <parameter>abstime</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void* <function>cyg_mempool_var_try_alloc</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + <paramdef>cyg_uint32 <parameter>size</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>cyg_mempool_var_free</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + <paramdef>void* <parameter>p</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>cyg_bool_t <function>cyg_mempool_var_waiting</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>cyg_mempool_var_get_info</function></funcdef> + <paramdef>cyg_handle_t <parameter>varpool</parameter></paramdef> + <paramdef>cyg_mempool_info* <parameter>info</parameter></paramdef> + </funcprototype> + </funcsynopsis> + </refsynopsisdiv> + + <refsect1 id="memalloc-variable-description"><title>Description</title> + + <para> + The variable size memory pool functions are used for allocating + blocks of any size. Before memory can be allocated the pool must + first be created by calling + <function>cyg_mempool_var_create()</function>. The parameter + <parameter>base</parameter> is a point to the bottom of the + memory area to be used by the pool and + <parameter>size</parameter> is the size of the memory area in + bytes. It also takes a pointer to a + <structname>cyg_mempool_var</structname> data structure which is + typically statically allocated, and may be part of a larger data + structure. It should be noted that some memory is take from the + pool for book keeping purposes. If a memory pool is no longer + required and there are not threads waiting to allocate memory + from it, it can be destroyed with + <function>cyg_mempool_var_delete()</function>. + </para> + + <para> + Memory can be allocated from the pool using a number of + functions. They all take the + paramters<parameter>varpool</parameter>which indicates which + pool should be used and the <parameter>size</parameter>which + indicates who big a memory area should be + allocated. <function>cyg_mempool_var_alloc()</function> will + block until the memory becomes + available. <function>cyg_mempool_tryalloc()</function>will try + not block if no memory is available and will return + <literal>NULL</literal>. Otherwise a pointer to the allocated + memory will be returned. + <function>cyg_mempool_var_timed_alloc()</function> will block if + memory is not available and wait for memory to become available + until the time<parameter>abstime</parameter> is reached. It will + then return <literal>NULL</literal>. + </para> + + <para> + Allocated memory can be freed using the function <function>cyg_mempool_var_free()</function>. + </para> + + <para> + Lastly it is possible to query information about the pool using + the function + <function>cyg_mempool_var_get_info()</function>. This takes a + pointer to the structure <structname>cyg_mempool_info</structname> which is: + <programlisting> +typedef struct { + cyg_int32 totalmem; + cyg_int32 freemem; + void *base; + cyg_int32 size; + cyg_int32 blocksize; + cyg_int32 maxfree; +} cyg_mempool_info; + </programlisting> + </para> + </refsect1> + </refentry> + <refentry id="fixed-pools"> + + <refmeta> + <refentrytitle>Fixed Size Allocation Pools</refentrytitle> + </refmeta> + + <refnamediv> + <refname>cyg_mempool_fix_create</refname> + <refname>cyg_mempool_fix_delete</refname> + <refname>cyg_mempool_fix_alloc</refname> + <refname>cyg_mempool_fix_timed_alloc</refname> + <refname>cyg_mempool_fix_try_alloc</refname> + <refname>cyg_mempool_fix_free</refname> + <refname>cyg_mempool_fix_waiting</refname> + <refname>cyg_mempool_fix_get_info</refname> + <refpurpose>Fixed Size Allocation Pools</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <funcsynopsis> + <funcsynopsisinfo> +#include <cyg/kernel/kapi.h> + </funcsynopsisinfo> + <funcprototype> + <funcdef>void <function>cyg_mempool_fix_create</function></funcdef> + <paramdef>void* <parameter>base</parameter></paramdef> + <paramdef>cyg_uint32 <parameter>size</parameter></paramdef> + <paramdef>cyg_uint32 <parameter>blocksize</parameter></paramdef> + <paramdef>cyg_handle_t* <parameter>fixpool</parameter></paramdef> + <paramdef>cyg_mempool_var* <parameter>var</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>cyg_mempool_fix_delete</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void* <function>cyg_mempool_fix_alloc</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void* <function>cyg_mempool_fix_timed_alloc</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + <paramdef>cyg_tick_count_t <parameter>abstime</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void* <function>cyg_mempool_fix_try_alloc</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>cyg_mempool_fix_free</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + <paramdef>void* <parameter>p</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>cyg_bool_t <function>cyg_mempool_fix_waiting</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>cyg_mempool_fix_get_info</function></funcdef> + <paramdef>cyg_handle_t <parameter>fixpool</parameter></paramdef> + <paramdef>cyg_mempool_info* <parameter>info</parameter></paramdef> + </funcprototype> + </funcsynopsis> + </refsynopsisdiv> + + <refsect1 id="memalloc-fixed-description"><title>Description</title> + + <para> + The fixed size memory pool functions are used for allocating + blocks of the same size. The allocation and free functions are + more efficient than the variable size pools, but are naturally + limited to being only able to allocate blocks of a sized + size. Before memory can be allocated the pool must first be + created by calling + <function>cyg_mempool_fix_create()</function>. + + The parameter <parameter>base</parameter> is a point to the + bottom of the memory area to be used by the pool and + <parameter>size</parameter> is the size of the memory area in + bytes. <parameter>blocksize</parameter> indicates the size of + each allocation in bytes. The function also takes a pointer to a + <structname>cyg_mempool_fix</structname> data structure which is + typically statically allocated, and may be part of a larger data + structure. It should be noted that some memory is take from the + pool for book keeping purposes. If a memory pool is no longer + required and there are not threads waiting to allocate memory + from it, it can be destroyed with + <function>cyg_mempool_fix_delete()</function>. + </para> + + <para> + Memory can be allocated from the pool using a number of + functions. They all take the + paramter<parameter>fixpool</parameter>which indicates which pool + should be used. <function>cyg_mempool_fix_alloc()</function> + will block until the memory becomes + available. <function>cyg_mempool_tryalloc()</function>will try + not block if no memory is available and will return + <literal>NULL</literal>. Otherwise a pointer to the allocated + memory will be returned. + <function>cyg_mempool_fix_timed_alloc()</function> will block if + memory is not available and wait for memory to become available + until the time<parameter>abstime</parameter> is reached. It will + then return <literal>NULL</literal>. </para> + + <para> + Allocated memory can be freed using the function <function>cyg_mempool_fix_free()</function>. + </para> + + <para> + Lastly it is possible to query information about the pool using + the function + <function>cyg_mempool_fix_get_info()</function>. This takes a + pointer to the structure <structname>cyg_mempool_info</structname> which is: + <programlisting> +typedef struct { + cyg_int32 totalmem; + cyg_int32 freemem; + void *base; + cyg_int32 size; + cyg_int32 blocksize; + cyg_int32 maxfree; +} cyg_mempool_info; + </programlisting> + </para> + </refsect1> + </refentry> + + <refentry id="malloc-pools"> + + <refmeta> + <refentrytitle>stdlib malloc Pools</refentrytitle> + </refmeta> + + <refnamediv> + <refname>malloc</refname> + <refname>calloc</refname> + <refname>free</refname> + <refname>realloc</refname> + <refname>mallinfo</refname> + <refpurpose>stdlib malloc pool</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <funcsynopsis> + <funcsynopsisinfo> +#include <stdlib.h> + </funcsynopsisinfo> + <funcprototype> + <funcdef>void *<function>malloc</function></funcdef> + <paramdef>size_t <parameter>size</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void *<function>calloc</function></funcdef> + <paramdef>size_t <parameter>size</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void <function>free</function></funcdef> + <paramdef>void *<parameter>ptr</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>void *<function>realloc</function></funcdef> + <paramdef>void *<parameter>ptr</parameter></paramdef> + <paramdef>size_t <parameter>size</parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>struct mallinfo <function>mallinfo</function></funcdef> + <void> + </funcprototype> + </funcsynopsis> + </refsynopsisdiv> + + <refsect1 id="memalloc-stdlib-description"><title>Description</title> + + <para> + eCos provides the standard library functions used for allocating + memory from the heap. <function>malloc()</function> allocates a + block of memory of + <parameter>size</parameter> bytes. <function>calloc()</function> + performs the same, but also sets the memory to zero. The + function <function>free()</function> returns a block to the + pool. <function>realloc</function> resizes a block of + memory. Lastly, <function>mallinfo()</function> returns + information about the heap, as described by the structure + <structname>mallinfo</structname>: + + <programlisting> +struct mallinfo { + int arena; /* total size of memory arena */ + int ordblks; /* number of ordinary memory blocks */ + int smblks; /* number of small memory blocks */ + int hblks; /* number of mmapped regions */ + int hblkhd; /* total space in mmapped regions */ + int usmblks; /* space used by small memory blocks */ + int fsmblks; /* space available for small memory blocks */ + int uordblks; /* space used by ordinary memory blocks */ + int fordblks; /* space free for ordinary blocks */ + int keepcost; /* top-most, releasable (via malloc_trim) space */ + int maxfree; /* (NON-STANDARD EXTENSION) size of largest free block */ +}; + </programlisting> + </para> + </refsect1> + </refentry> +</CHAPTER> +</PART>
