| 1 | 
         578 | 
         markom | 
         This is ./mmalloc.info, produced by makeinfo version 4.0 from
  | 
      
      
         | 2 | 
          | 
          | 
         mmalloc.texi.
  | 
      
      
         | 3 | 
          | 
          | 
          
  | 
      
      
         | 4 | 
          | 
          | 
         START-INFO-DIR-ENTRY
  | 
      
      
         | 5 | 
          | 
          | 
         * Mmalloc: (mmalloc).           The GNU mapped-malloc package.
  | 
      
      
         | 6 | 
          | 
          | 
         END-INFO-DIR-ENTRY
  | 
      
      
         | 7 | 
          | 
          | 
          
  | 
      
      
         | 8 | 
          | 
          | 
            This file documents the GNU mmalloc (mapped-malloc) package, written
  | 
      
      
         | 9 | 
          | 
          | 
         by fnf@cygnus.com, based on GNU malloc written by mike@ai.mit.edu.
  | 
      
      
         | 10 | 
          | 
          | 
          
  | 
      
      
         | 11 | 
          | 
          | 
            Copyright (C) 1992 Free Software Foundation, Inc.
  | 
      
      
         | 12 | 
          | 
          | 
          
  | 
      
      
         | 13 | 
          | 
          | 
            Permission is granted to make and distribute verbatim copies of this
  | 
      
      
         | 14 | 
          | 
          | 
         manual provided the copyright notice and this permission notice are
  | 
      
      
         | 15 | 
          | 
          | 
         preserved on all copies.
  | 
      
      
         | 16 | 
          | 
          | 
          
  | 
      
      
         | 17 | 
          | 
          | 
            Permission is granted to copy and distribute modified versions of
  | 
      
      
         | 18 | 
          | 
          | 
         this manual under the conditions for verbatim copying, provided also
  | 
      
      
         | 19 | 
          | 
          | 
         that the entire resulting derived work is distributed under the terms
  | 
      
      
         | 20 | 
          | 
          | 
         of a permission notice identical to this one.
  | 
      
      
         | 21 | 
          | 
          | 
          
  | 
      
      
         | 22 | 
          | 
          | 
            Permission is granted to copy and distribute translations of this
  | 
      
      
         | 23 | 
          | 
          | 
         manual into another language, under the above conditions for modified
  | 
      
      
         | 24 | 
          | 
          | 
         versions.
  | 
      
      
         | 25 | 
          | 
          | 
          
  | 
      
      
         | 26 | 
          | 
          | 
         
  | 
      
      
         | 27 | 
          | 
          | 
         File: mmalloc.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
  | 
      
      
         | 28 | 
          | 
          | 
          
  | 
      
      
         | 29 | 
          | 
          | 
         mmalloc
  | 
      
      
         | 30 | 
          | 
          | 
         *******
  | 
      
      
         | 31 | 
          | 
          | 
          
  | 
      
      
         | 32 | 
          | 
          | 
            This file documents the GNU memory-mapped malloc package mmalloc.
  | 
      
      
         | 33 | 
          | 
          | 
          
  | 
      
      
         | 34 | 
          | 
          | 
         * Menu:
  | 
      
      
         | 35 | 
          | 
          | 
          
  | 
      
      
         | 36 | 
          | 
          | 
         * Overview::                    Overall Description
  | 
      
      
         | 37 | 
          | 
          | 
         * Implementation::              Implementation
  | 
      
      
         | 38 | 
          | 
          | 
          
  | 
      
      
         | 39 | 
          | 
          | 
          --- The Detailed Node Listing ---
  | 
      
      
         | 40 | 
          | 
          | 
          
  | 
      
      
         | 41 | 
          | 
          | 
         Implementation
  | 
      
      
         | 42 | 
          | 
          | 
          
  | 
      
      
         | 43 | 
          | 
          | 
         * Compatibility::               Backwards Compatibility
  | 
      
      
         | 44 | 
          | 
          | 
         * Functions::                   Function Descriptions
  | 
      
      
         | 45 | 
          | 
          | 
          
  | 
      
      
         | 46 | 
          | 
          | 
         
  | 
      
      
         | 47 | 
          | 
          | 
         File: mmalloc.info,  Node: Overview,  Next: Implementation,  Prev: Top,  Up: Top
  | 
      
      
         | 48 | 
          | 
          | 
          
  | 
      
      
         | 49 | 
          | 
          | 
         Overall Description
  | 
      
      
         | 50 | 
          | 
          | 
         *******************
  | 
      
      
         | 51 | 
          | 
          | 
          
  | 
      
      
         | 52 | 
          | 
          | 
            This is a heavily modified version of GNU `malloc'.  It uses `mmap'
  | 
      
      
         | 53 | 
          | 
          | 
         as the basic mechanism for obtaining memory from the system, rather
  | 
      
      
         | 54 | 
          | 
          | 
         than `sbrk'.  This gives it several advantages over the more
  | 
      
      
         | 55 | 
          | 
          | 
         traditional malloc:
  | 
      
      
         | 56 | 
          | 
          | 
          
  | 
      
      
         | 57 | 
          | 
          | 
            * Several different heaps can be used, each of them growing or
  | 
      
      
         | 58 | 
          | 
          | 
              shinking under control of `mmap', with the `mmalloc' functions
  | 
      
      
         | 59 | 
          | 
          | 
              using a specific heap on a call by call basis.
  | 
      
      
         | 60 | 
          | 
          | 
          
  | 
      
      
         | 61 | 
          | 
          | 
            * By using `mmap', it is easy to create heaps which are intended to
  | 
      
      
         | 62 | 
          | 
          | 
              be persistent and exist as a filesystem object after the creating
  | 
      
      
         | 63 | 
          | 
          | 
              process has gone away.
  | 
      
      
         | 64 | 
          | 
          | 
          
  | 
      
      
         | 65 | 
          | 
          | 
            * Because multiple heaps can be managed, data used for a specific
  | 
      
      
         | 66 | 
          | 
          | 
              purpose can be allocated into its own heap, making it easier to
  | 
      
      
         | 67 | 
          | 
          | 
              allow applications to "dump" and "restore" initialized
  | 
      
      
         | 68 | 
          | 
          | 
              malloc-managed memory regions.  For example, the "unexec" hack
  | 
      
      
         | 69 | 
          | 
          | 
              popularized by GNU Emacs could potentially go away.
  | 
      
      
         | 70 | 
          | 
          | 
          
  | 
      
      
         | 71 | 
          | 
          | 
         
  | 
      
      
         | 72 | 
          | 
          | 
         File: mmalloc.info,  Node: Implementation,  Prev: Overview,  Up: Top
  | 
      
      
         | 73 | 
          | 
          | 
          
  | 
      
      
         | 74 | 
          | 
          | 
         Implementation
  | 
      
      
         | 75 | 
          | 
          | 
         **************
  | 
      
      
         | 76 | 
          | 
          | 
          
  | 
      
      
         | 77 | 
          | 
          | 
            The `mmalloc' functions contain no internal static state.  All
  | 
      
      
         | 78 | 
          | 
          | 
         `mmalloc' internal data is allocated in the mapped in region, along
  | 
      
      
         | 79 | 
          | 
          | 
         with the user data that it manages.  This allows it to manage multiple
  | 
      
      
         | 80 | 
          | 
          | 
         such regions and to "pick up where it left off" when such regions are
  | 
      
      
         | 81 | 
          | 
          | 
         later dynamically mapped back in.
  | 
      
      
         | 82 | 
          | 
          | 
          
  | 
      
      
         | 83 | 
          | 
          | 
            In some sense, malloc has been "purified" to contain no internal
  | 
      
      
         | 84 | 
          | 
          | 
         state information and generalized to use multiple memory regions rather
  | 
      
      
         | 85 | 
          | 
          | 
         than a single region managed by `sbrk'.  However the new routines now
  | 
      
      
         | 86 | 
          | 
          | 
         need an extra parameter which informs `mmalloc' which memory region it
  | 
      
      
         | 87 | 
          | 
          | 
         is dealing with (along with other information).  This parameter is
  | 
      
      
         | 88 | 
          | 
          | 
         called the "malloc descriptor".
  | 
      
      
         | 89 | 
          | 
          | 
          
  | 
      
      
         | 90 | 
          | 
          | 
            The functions initially provided by `mmalloc' are:
  | 
      
      
         | 91 | 
          | 
          | 
          
  | 
      
      
         | 92 | 
          | 
          | 
              void *mmalloc_attach (int fd, void *baseaddr);
  | 
      
      
         | 93 | 
          | 
          | 
              void *mmalloc_detach (void *md);
  | 
      
      
         | 94 | 
          | 
          | 
              int mmalloc_errno (void *md);
  | 
      
      
         | 95 | 
          | 
          | 
              int mmalloc_setkey (void *md, int keynum, void *key);
  | 
      
      
         | 96 | 
          | 
          | 
              void *mmalloc_getkey (void *md, int keynum);
  | 
      
      
         | 97 | 
          | 
          | 
          
  | 
      
      
         | 98 | 
          | 
          | 
              void *mmalloc (void *md, size_t size);
  | 
      
      
         | 99 | 
          | 
          | 
              void *mrealloc (void *md, void *ptr, size_t size);
  | 
      
      
         | 100 | 
          | 
          | 
              void *mvalloc (void *md, size_t size);
  | 
      
      
         | 101 | 
          | 
          | 
              void mfree (void *md, void *ptr);
  | 
      
      
         | 102 | 
          | 
          | 
          
  | 
      
      
         | 103 | 
          | 
          | 
         * Menu:
  | 
      
      
         | 104 | 
          | 
          | 
          
  | 
      
      
         | 105 | 
          | 
          | 
         * Compatibility::               Backwards Compatibility
  | 
      
      
         | 106 | 
          | 
          | 
         * Functions::                   Function Descriptions
  | 
      
      
         | 107 | 
          | 
          | 
          
  | 
      
      
         | 108 | 
          | 
          | 
         
  | 
      
      
         | 109 | 
          | 
          | 
         File: mmalloc.info,  Node: Compatibility,  Next: Functions,  Prev: Implementation,  Up: Implementation
  | 
      
      
         | 110 | 
          | 
          | 
          
  | 
      
      
         | 111 | 
          | 
          | 
         Backwards Compatibility
  | 
      
      
         | 112 | 
          | 
          | 
         =======================
  | 
      
      
         | 113 | 
          | 
          | 
          
  | 
      
      
         | 114 | 
          | 
          | 
            To allow a single malloc package to be used in a given application,
  | 
      
      
         | 115 | 
          | 
          | 
         provision is made for the traditional `malloc', `realloc', and `free'
  | 
      
      
         | 116 | 
          | 
          | 
         functions to be implemented as special cases of the `mmalloc'
  | 
      
      
         | 117 | 
          | 
          | 
         functions.  In particular, if any of the functions that expect malloc
  | 
      
      
         | 118 | 
          | 
          | 
         descriptors are called with a `NULL' pointer rather than a valid malloc
  | 
      
      
         | 119 | 
          | 
          | 
         descriptor, then they default to using an `sbrk' managed region.  The
  | 
      
      
         | 120 | 
          | 
          | 
         `mmalloc' package provides compatible `malloc', `realloc', and `free'
  | 
      
      
         | 121 | 
          | 
          | 
         functions using this mechanism internally.  Applications can avoid this
  | 
      
      
         | 122 | 
          | 
          | 
         extra interface layer by simply including the following defines:
  | 
      
      
         | 123 | 
          | 
          | 
          
  | 
      
      
         | 124 | 
          | 
          | 
              #define malloc(size)               mmalloc ((void *)0, (size))
  | 
      
      
         | 125 | 
          | 
          | 
              #define realloc(ptr,size)  mrealloc ((void *)0, (ptr), (size));
  | 
      
      
         | 126 | 
          | 
          | 
              #define free(ptr)          mfree ((void *)0, (ptr))
  | 
      
      
         | 127 | 
          | 
          | 
          
  | 
      
      
         | 128 | 
          | 
          | 
         or replace the existing `malloc', `realloc', and `free' calls with the
  | 
      
      
         | 129 | 
          | 
          | 
         above patterns if using `#define' causes problems.
  | 
      
      
         | 130 | 
          | 
          | 
          
  | 
      
      
         | 131 | 
          | 
          | 
         
  | 
      
      
         | 132 | 
          | 
          | 
         File: mmalloc.info,  Node: Functions,  Prev: Compatibility,  Up: Implementation
  | 
      
      
         | 133 | 
          | 
          | 
          
  | 
      
      
         | 134 | 
          | 
          | 
         Function Descriptions
  | 
      
      
         | 135 | 
          | 
          | 
         =====================
  | 
      
      
         | 136 | 
          | 
          | 
          
  | 
      
      
         | 137 | 
          | 
          | 
            These are the details on the functions that make up the `mmalloc'
  | 
      
      
         | 138 | 
          | 
          | 
         package.
  | 
      
      
         | 139 | 
          | 
          | 
          
  | 
      
      
         | 140 | 
          | 
          | 
         `void *mmalloc_attach (int FD, void *BASEADDR);'
  | 
      
      
         | 141 | 
          | 
          | 
              Initialize access to a `mmalloc' managed region.
  | 
      
      
         | 142 | 
          | 
          | 
          
  | 
      
      
         | 143 | 
          | 
          | 
              If FD is a valid file descriptor for an open file, then data for
  | 
      
      
         | 144 | 
          | 
          | 
              the `mmalloc' managed region is mapped to that file.   Otherwise
  | 
      
      
         | 145 | 
          | 
          | 
              `/dev/zero' is used and the data will not exist in any filesystem
  | 
      
      
         | 146 | 
          | 
          | 
              object.
  | 
      
      
         | 147 | 
          | 
          | 
          
  | 
      
      
         | 148 | 
          | 
          | 
              If the open file corresponding to FD is from a previous use of
  | 
      
      
         | 149 | 
          | 
          | 
              `mmalloc' and passes some basic sanity checks to ensure that it is
  | 
      
      
         | 150 | 
          | 
          | 
              compatible with the current `mmalloc' package, then its data is
  | 
      
      
         | 151 | 
          | 
          | 
              mapped in and is immediately accessible at the same addresses in
  | 
      
      
         | 152 | 
          | 
          | 
              the current process as the process that created the file.
  | 
      
      
         | 153 | 
          | 
          | 
          
  | 
      
      
         | 154 | 
          | 
          | 
              If BASEADDR is not `NULL', the mapping is established starting at
  | 
      
      
         | 155 | 
          | 
          | 
              the specified address in the process address space.  If BASEADDR
  | 
      
      
         | 156 | 
          | 
          | 
              is `NULL', the `mmalloc' package chooses a suitable address at
  | 
      
      
         | 157 | 
          | 
          | 
              which to start the mapped region, which will be the value of the
  | 
      
      
         | 158 | 
          | 
          | 
              previous mapping if opening an existing file which was previously
  | 
      
      
         | 159 | 
          | 
          | 
              built by `mmalloc', or for new files will be a value chosen by
  | 
      
      
         | 160 | 
          | 
          | 
              `mmap'.
  | 
      
      
         | 161 | 
          | 
          | 
          
  | 
      
      
         | 162 | 
          | 
          | 
              Specifying BASEADDR provides more control over where the regions
  | 
      
      
         | 163 | 
          | 
          | 
              start and how big they can be before bumping into existing mapped
  | 
      
      
         | 164 | 
          | 
          | 
              regions or future mapped regions.
  | 
      
      
         | 165 | 
          | 
          | 
          
  | 
      
      
         | 166 | 
          | 
          | 
              On success, returns a malloc descriptor which is used in subsequent
  | 
      
      
         | 167 | 
          | 
          | 
              calls to other `mmalloc' package functions.  It is explicitly
  | 
      
      
         | 168 | 
          | 
          | 
              `void *' (`char *' for systems that don't fully support `void') so
  | 
      
      
         | 169 | 
          | 
          | 
              that users of the package don't have to worry about the actual
  | 
      
      
         | 170 | 
          | 
          | 
              implementation details.
  | 
      
      
         | 171 | 
          | 
          | 
          
  | 
      
      
         | 172 | 
          | 
          | 
              On failure returns `NULL'.
  | 
      
      
         | 173 | 
          | 
          | 
          
  | 
      
      
         | 174 | 
          | 
          | 
         `void *mmalloc_detach (void *MD);'
  | 
      
      
         | 175 | 
          | 
          | 
              Terminate access to a `mmalloc' managed region identified by the
  | 
      
      
         | 176 | 
          | 
          | 
              descriptor MD, by closing the base file and unmapping all memory
  | 
      
      
         | 177 | 
          | 
          | 
              pages associated with the region.
  | 
      
      
         | 178 | 
          | 
          | 
          
  | 
      
      
         | 179 | 
          | 
          | 
              Returns `NULL' on success.
  | 
      
      
         | 180 | 
          | 
          | 
          
  | 
      
      
         | 181 | 
          | 
          | 
              Returns the malloc descriptor on failure, which can subsequently
  | 
      
      
         | 182 | 
          | 
          | 
              be used for further action (such as obtaining more information
  | 
      
      
         | 183 | 
          | 
          | 
              about the nature of the failure).
  | 
      
      
         | 184 | 
          | 
          | 
          
  | 
      
      
         | 185 | 
          | 
          | 
         `void *mmalloc (void *MD, size_t SIZE);'
  | 
      
      
         | 186 | 
          | 
          | 
              Given an `mmalloc' descriptor MD, allocate additional memory of
  | 
      
      
         | 187 | 
          | 
          | 
              SIZE bytes in the associated mapped region.
  | 
      
      
         | 188 | 
          | 
          | 
          
  | 
      
      
         | 189 | 
          | 
          | 
         `*mrealloc (void *MD, void *PTR, size_t SIZE);'
  | 
      
      
         | 190 | 
          | 
          | 
              Given an `mmalloc' descriptor MD and a pointer to memory
  | 
      
      
         | 191 | 
          | 
          | 
              previously allocated by `mmalloc' in PTR, reallocate the memory to
  | 
      
      
         | 192 | 
          | 
          | 
              be SIZE bytes long, possibly moving the existing contents of
  | 
      
      
         | 193 | 
          | 
          | 
              memory if necessary.
  | 
      
      
         | 194 | 
          | 
          | 
          
  | 
      
      
         | 195 | 
          | 
          | 
         `void *mvalloc (void *MD, size_t SIZE);'
  | 
      
      
         | 196 | 
          | 
          | 
              Like `mmalloc' but the resulting memory is aligned on a page
  | 
      
      
         | 197 | 
          | 
          | 
              boundary.
  | 
      
      
         | 198 | 
          | 
          | 
          
  | 
      
      
         | 199 | 
          | 
          | 
         `void mfree (void *MD, void *PTR);'
  | 
      
      
         | 200 | 
          | 
          | 
              Given an `mmalloc' descriptor MD and a pointer to memory previously
  | 
      
      
         | 201 | 
          | 
          | 
              allocated by `mmalloc' in PTR, free the previously allocated
  | 
      
      
         | 202 | 
          | 
          | 
              memory.
  | 
      
      
         | 203 | 
          | 
          | 
          
  | 
      
      
         | 204 | 
          | 
          | 
         `int mmalloc_errno (void *MD);'
  | 
      
      
         | 205 | 
          | 
          | 
              Given a `mmalloc' descriptor, if the last `mmalloc' operation
  | 
      
      
         | 206 | 
          | 
          | 
              failed for some reason due to a system call failure, then returns
  | 
      
      
         | 207 | 
          | 
          | 
              the associated `errno'.  Returns 0 otherwise.  (This function is
  | 
      
      
         | 208 | 
          | 
          | 
              not yet implemented).
  | 
      
      
         | 209 | 
          | 
          | 
          
  | 
      
      
         | 210 | 
          | 
          | 
          
  | 
      
      
         | 211 | 
          | 
          | 
         
  | 
      
      
         | 212 | 
          | 
          | 
         Tag Table:
  | 
      
      
         | 213 | 
          | 
          | 
         Node: Top937
  | 
      
      
         | 214 | 
          | 
          | 
         Node: Overview1373
  | 
      
      
         | 215 | 
          | 
          | 
         Node: Implementation2401
  | 
      
      
         | 216 | 
          | 
          | 
         Node: Compatibility3794
  | 
      
      
         | 217 | 
          | 
          | 
         Node: Functions4868
  | 
      
      
         | 218 | 
          | 
          | 
         
  | 
      
      
         | 219 | 
          | 
          | 
         End Tag Table
  |