URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [insight/] [mmalloc/] [mmalloc.info] - Rev 1771
Go to most recent revision | Compare with Previous | Blame | View Log
This is ./mmalloc.info, produced by makeinfo version 4.0 frommmalloc.texi.START-INFO-DIR-ENTRY* Mmalloc: (mmalloc). The GNU mapped-malloc package.END-INFO-DIR-ENTRYThis file documents the GNU mmalloc (mapped-malloc) package, writtenby fnf@cygnus.com, based on GNU malloc written by mike@ai.mit.edu.Copyright (C) 1992 Free Software Foundation, Inc.Permission is granted to make and distribute verbatim copies of thismanual provided the copyright notice and this permission notice arepreserved on all copies.Permission is granted to copy and distribute modified versions ofthis manual under the conditions for verbatim copying, provided alsothat the entire resulting derived work is distributed under the termsof a permission notice identical to this one.Permission is granted to copy and distribute translations of thismanual into another language, under the above conditions for modifiedversions.File: mmalloc.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir)mmalloc*******This file documents the GNU memory-mapped malloc package mmalloc.* Menu:* Overview:: Overall Description* Implementation:: Implementation--- The Detailed Node Listing ---Implementation* Compatibility:: Backwards Compatibility* Functions:: Function DescriptionsFile: mmalloc.info, Node: Overview, Next: Implementation, Prev: Top, Up: TopOverall Description*******************This is a heavily modified version of GNU `malloc'. It uses `mmap'as the basic mechanism for obtaining memory from the system, ratherthan `sbrk'. This gives it several advantages over the moretraditional malloc:* Several different heaps can be used, each of them growing orshinking under control of `mmap', with the `mmalloc' functionsusing a specific heap on a call by call basis.* By using `mmap', it is easy to create heaps which are intended tobe persistent and exist as a filesystem object after the creatingprocess has gone away.* Because multiple heaps can be managed, data used for a specificpurpose can be allocated into its own heap, making it easier toallow applications to "dump" and "restore" initializedmalloc-managed memory regions. For example, the "unexec" hackpopularized by GNU Emacs could potentially go away.File: mmalloc.info, Node: Implementation, Prev: Overview, Up: TopImplementation**************The `mmalloc' functions contain no internal static state. All`mmalloc' internal data is allocated in the mapped in region, alongwith the user data that it manages. This allows it to manage multiplesuch regions and to "pick up where it left off" when such regions arelater dynamically mapped back in.In some sense, malloc has been "purified" to contain no internalstate information and generalized to use multiple memory regions ratherthan a single region managed by `sbrk'. However the new routines nowneed an extra parameter which informs `mmalloc' which memory region itis dealing with (along with other information). This parameter iscalled the "malloc descriptor".The functions initially provided by `mmalloc' are:void *mmalloc_attach (int fd, void *baseaddr);void *mmalloc_detach (void *md);int mmalloc_errno (void *md);int mmalloc_setkey (void *md, int keynum, void *key);void *mmalloc_getkey (void *md, int keynum);void *mmalloc (void *md, size_t size);void *mrealloc (void *md, void *ptr, size_t size);void *mvalloc (void *md, size_t size);void mfree (void *md, void *ptr);* Menu:* Compatibility:: Backwards Compatibility* Functions:: Function DescriptionsFile: mmalloc.info, Node: Compatibility, Next: Functions, Prev: Implementation, Up: ImplementationBackwards Compatibility=======================To allow a single malloc package to be used in a given application,provision is made for the traditional `malloc', `realloc', and `free'functions to be implemented as special cases of the `mmalloc'functions. In particular, if any of the functions that expect mallocdescriptors are called with a `NULL' pointer rather than a valid mallocdescriptor, then they default to using an `sbrk' managed region. The`mmalloc' package provides compatible `malloc', `realloc', and `free'functions using this mechanism internally. Applications can avoid thisextra interface layer by simply including the following defines:#define malloc(size) mmalloc ((void *)0, (size))#define realloc(ptr,size) mrealloc ((void *)0, (ptr), (size));#define free(ptr) mfree ((void *)0, (ptr))or replace the existing `malloc', `realloc', and `free' calls with theabove patterns if using `#define' causes problems.File: mmalloc.info, Node: Functions, Prev: Compatibility, Up: ImplementationFunction Descriptions=====================These are the details on the functions that make up the `mmalloc'package.`void *mmalloc_attach (int FD, void *BASEADDR);'Initialize access to a `mmalloc' managed region.If FD is a valid file descriptor for an open file, then data forthe `mmalloc' managed region is mapped to that file. Otherwise`/dev/zero' is used and the data will not exist in any filesystemobject.If the open file corresponding to FD is from a previous use of`mmalloc' and passes some basic sanity checks to ensure that it iscompatible with the current `mmalloc' package, then its data ismapped in and is immediately accessible at the same addresses inthe current process as the process that created the file.If BASEADDR is not `NULL', the mapping is established starting atthe specified address in the process address space. If BASEADDRis `NULL', the `mmalloc' package chooses a suitable address atwhich to start the mapped region, which will be the value of theprevious mapping if opening an existing file which was previouslybuilt by `mmalloc', or for new files will be a value chosen by`mmap'.Specifying BASEADDR provides more control over where the regionsstart and how big they can be before bumping into existing mappedregions or future mapped regions.On success, returns a malloc descriptor which is used in subsequentcalls to other `mmalloc' package functions. It is explicitly`void *' (`char *' for systems that don't fully support `void') sothat users of the package don't have to worry about the actualimplementation details.On failure returns `NULL'.`void *mmalloc_detach (void *MD);'Terminate access to a `mmalloc' managed region identified by thedescriptor MD, by closing the base file and unmapping all memorypages associated with the region.Returns `NULL' on success.Returns the malloc descriptor on failure, which can subsequentlybe used for further action (such as obtaining more informationabout the nature of the failure).`void *mmalloc (void *MD, size_t SIZE);'Given an `mmalloc' descriptor MD, allocate additional memory ofSIZE bytes in the associated mapped region.`*mrealloc (void *MD, void *PTR, size_t SIZE);'Given an `mmalloc' descriptor MD and a pointer to memorypreviously allocated by `mmalloc' in PTR, reallocate the memory tobe SIZE bytes long, possibly moving the existing contents ofmemory if necessary.`void *mvalloc (void *MD, size_t SIZE);'Like `mmalloc' but the resulting memory is aligned on a pageboundary.`void mfree (void *MD, void *PTR);'Given an `mmalloc' descriptor MD and a pointer to memory previouslyallocated by `mmalloc' in PTR, free the previously allocatedmemory.`int mmalloc_errno (void *MD);'Given a `mmalloc' descriptor, if the last `mmalloc' operationfailed for some reason due to a system call failure, then returnsthe associated `errno'. Returns 0 otherwise. (This function isnot yet implemented).Tag Table:Node: Top937Node: Overview1373Node: Implementation2401Node: Compatibility3794Node: Functions4868End Tag Table
Go to most recent revision | Compare with Previous | Blame | View Log
