| xf.li | bdd93d5 | 2023-05-12 07:10:14 -0700 | [diff] [blame] | 1 | @node Memory, Character Handling, Error Reporting, Top | 
|  | 2 | @chapter Virtual Memory Allocation And Paging | 
|  | 3 | @c %MENU% Allocating virtual memory and controlling paging | 
|  | 4 | @cindex memory allocation | 
|  | 5 | @cindex storage allocation | 
|  | 6 |  | 
|  | 7 | This chapter describes how processes manage and use memory in a system | 
|  | 8 | that uses @theglibc{}. | 
|  | 9 |  | 
|  | 10 | @Theglibc{} has several functions for dynamically allocating | 
|  | 11 | virtual memory in various ways.  They vary in generality and in | 
|  | 12 | efficiency.  The library also provides functions for controlling paging | 
|  | 13 | and allocation of real memory. | 
|  | 14 |  | 
|  | 15 |  | 
|  | 16 | @menu | 
|  | 17 | * Memory Concepts::             An introduction to concepts and terminology. | 
|  | 18 | * Memory Allocation::           Allocating storage for your program data | 
|  | 19 | * Resizing the Data Segment::   @code{brk}, @code{sbrk} | 
|  | 20 | * Locking Pages::               Preventing page faults | 
|  | 21 | @end menu | 
|  | 22 |  | 
|  | 23 | Memory mapped I/O is not discussed in this chapter.  @xref{Memory-mapped I/O}. | 
|  | 24 |  | 
|  | 25 |  | 
|  | 26 |  | 
|  | 27 | @node Memory Concepts | 
|  | 28 | @section Process Memory Concepts | 
|  | 29 |  | 
|  | 30 | One of the most basic resources a process has available to it is memory. | 
|  | 31 | There are a lot of different ways systems organize memory, but in a | 
|  | 32 | typical one, each process has one linear virtual address space, with | 
|  | 33 | addresses running from zero to some huge maximum.  It need not be | 
|  | 34 | contiguous; i.e., not all of these addresses actually can be used to | 
|  | 35 | store data. | 
|  | 36 |  | 
|  | 37 | The virtual memory is divided into pages (4 kilobytes is typical). | 
|  | 38 | Backing each page of virtual memory is a page of real memory (called a | 
|  | 39 | @dfn{frame}) or some secondary storage, usually disk space.  The disk | 
|  | 40 | space might be swap space or just some ordinary disk file.  Actually, a | 
|  | 41 | page of all zeroes sometimes has nothing at all backing it -- there's | 
|  | 42 | just a flag saying it is all zeroes. | 
|  | 43 | @cindex page frame | 
|  | 44 | @cindex frame, real memory | 
|  | 45 | @cindex swap space | 
|  | 46 | @cindex page, virtual memory | 
|  | 47 |  | 
|  | 48 | The same frame of real memory or backing store can back multiple virtual | 
|  | 49 | pages belonging to multiple processes.  This is normally the case, for | 
|  | 50 | example, with virtual memory occupied by @glibcadj{} code.  The same | 
|  | 51 | real memory frame containing the @code{printf} function backs a virtual | 
|  | 52 | memory page in each of the existing processes that has a @code{printf} | 
|  | 53 | call in its program. | 
|  | 54 |  | 
|  | 55 | In order for a program to access any part of a virtual page, the page | 
|  | 56 | must at that moment be backed by (``connected to'') a real frame.  But | 
|  | 57 | because there is usually a lot more virtual memory than real memory, the | 
|  | 58 | pages must move back and forth between real memory and backing store | 
|  | 59 | regularly, coming into real memory when a process needs to access them | 
|  | 60 | and then retreating to backing store when not needed anymore.  This | 
|  | 61 | movement is called @dfn{paging}. | 
|  | 62 |  | 
|  | 63 | When a program attempts to access a page which is not at that moment | 
|  | 64 | backed by real memory, this is known as a @dfn{page fault}.  When a page | 
|  | 65 | fault occurs, the kernel suspends the process, places the page into a | 
|  | 66 | real page frame (this is called ``paging in'' or ``faulting in''), then | 
|  | 67 | resumes the process so that from the process' point of view, the page | 
|  | 68 | was in real memory all along.  In fact, to the process, all pages always | 
|  | 69 | seem to be in real memory.  Except for one thing: the elapsed execution | 
|  | 70 | time of an instruction that would normally be a few nanoseconds is | 
|  | 71 | suddenly much, much, longer (because the kernel normally has to do I/O | 
|  | 72 | to complete the page-in).  For programs sensitive to that, the functions | 
|  | 73 | described in @ref{Locking Pages} can control it. | 
|  | 74 | @cindex page fault | 
|  | 75 | @cindex paging | 
|  | 76 |  | 
|  | 77 | Within each virtual address space, a process has to keep track of what | 
|  | 78 | is at which addresses, and that process is called memory allocation. | 
|  | 79 | Allocation usually brings to mind meting out scarce resources, but in | 
|  | 80 | the case of virtual memory, that's not a major goal, because there is | 
|  | 81 | generally much more of it than anyone needs.  Memory allocation within a | 
|  | 82 | process is mainly just a matter of making sure that the same byte of | 
|  | 83 | memory isn't used to store two different things. | 
|  | 84 |  | 
|  | 85 | Processes allocate memory in two major ways: by exec and | 
|  | 86 | programmatically.  Actually, forking is a third way, but it's not very | 
|  | 87 | interesting.  @xref{Creating a Process}. | 
|  | 88 |  | 
|  | 89 | Exec is the operation of creating a virtual address space for a process, | 
|  | 90 | loading its basic program into it, and executing the program.  It is | 
|  | 91 | done by the ``exec'' family of functions (e.g. @code{execl}).  The | 
|  | 92 | operation takes a program file (an executable), it allocates space to | 
|  | 93 | load all the data in the executable, loads it, and transfers control to | 
|  | 94 | it.  That data is most notably the instructions of the program (the | 
|  | 95 | @dfn{text}), but also literals and constants in the program and even | 
|  | 96 | some variables: C variables with the static storage class (@pxref{Memory | 
|  | 97 | Allocation and C}). | 
|  | 98 | @cindex executable | 
|  | 99 | @cindex literals | 
|  | 100 | @cindex constants | 
|  | 101 |  | 
|  | 102 | Once that program begins to execute, it uses programmatic allocation to | 
|  | 103 | gain additional memory.  In a C program with @theglibc{}, there | 
|  | 104 | are two kinds of programmatic allocation: automatic and dynamic. | 
|  | 105 | @xref{Memory Allocation and C}. | 
|  | 106 |  | 
|  | 107 | Memory-mapped I/O is another form of dynamic virtual memory allocation. | 
|  | 108 | Mapping memory to a file means declaring that the contents of certain | 
|  | 109 | range of a process' addresses shall be identical to the contents of a | 
|  | 110 | specified regular file.  The system makes the virtual memory initially | 
|  | 111 | contain the contents of the file, and if you modify the memory, the | 
|  | 112 | system writes the same modification to the file.  Note that due to the | 
|  | 113 | magic of virtual memory and page faults, there is no reason for the | 
|  | 114 | system to do I/O to read the file, or allocate real memory for its | 
|  | 115 | contents, until the program accesses the virtual memory. | 
|  | 116 | @xref{Memory-mapped I/O}. | 
|  | 117 | @cindex memory mapped I/O | 
|  | 118 | @cindex memory mapped file | 
|  | 119 | @cindex files, accessing | 
|  | 120 |  | 
|  | 121 | Just as it programmatically allocates memory, the program can | 
|  | 122 | programmatically deallocate (@dfn{free}) it.  You can't free the memory | 
|  | 123 | that was allocated by exec.  When the program exits or execs, you might | 
|  | 124 | say that all its memory gets freed, but since in both cases the address | 
|  | 125 | space ceases to exist, the point is really moot.  @xref{Program | 
|  | 126 | Termination}. | 
|  | 127 | @cindex execing a program | 
|  | 128 | @cindex freeing memory | 
|  | 129 | @cindex exiting a program | 
|  | 130 |  | 
|  | 131 | A process' virtual address space is divided into segments.  A segment is | 
|  | 132 | a contiguous range of virtual addresses.  Three important segments are: | 
|  | 133 |  | 
|  | 134 | @itemize @bullet | 
|  | 135 |  | 
|  | 136 | @item | 
|  | 137 |  | 
|  | 138 | The @dfn{text segment} contains a program's instructions and literals and | 
|  | 139 | static constants.  It is allocated by exec and stays the same size for | 
|  | 140 | the life of the virtual address space. | 
|  | 141 |  | 
|  | 142 | @item | 
|  | 143 | The @dfn{data segment} is working storage for the program.  It can be | 
|  | 144 | preallocated and preloaded by exec and the process can extend or shrink | 
|  | 145 | it by calling functions as described in @xref{Resizing the Data | 
|  | 146 | Segment}.  Its lower end is fixed. | 
|  | 147 |  | 
|  | 148 | @item | 
|  | 149 | The @dfn{stack segment} contains a program stack.  It grows as the stack | 
|  | 150 | grows, but doesn't shrink when the stack shrinks. | 
|  | 151 |  | 
|  | 152 | @end itemize | 
|  | 153 |  | 
|  | 154 |  | 
|  | 155 |  | 
|  | 156 | @node Memory Allocation | 
|  | 157 | @section Allocating Storage For Program Data | 
|  | 158 |  | 
|  | 159 | This section covers how ordinary programs manage storage for their data, | 
|  | 160 | including the famous @code{malloc} function and some fancier facilities | 
|  | 161 | special @theglibc{} and GNU Compiler. | 
|  | 162 |  | 
|  | 163 | @menu | 
|  | 164 | * Memory Allocation and C::     How to get different kinds of allocation in C. | 
|  | 165 | * Unconstrained Allocation::    The @code{malloc} facility allows fully general | 
|  | 166 | dynamic allocation. | 
|  | 167 | * Allocation Debugging::        Finding memory leaks and not freed memory. | 
|  | 168 | * Obstacks::                    Obstacks are less general than malloc | 
|  | 169 | but more efficient and convenient. | 
|  | 170 | * Variable Size Automatic::     Allocation of variable-sized blocks | 
|  | 171 | of automatic storage that are freed when the | 
|  | 172 | calling function returns. | 
|  | 173 | @end menu | 
|  | 174 |  | 
|  | 175 |  | 
|  | 176 | @node Memory Allocation and C | 
|  | 177 | @subsection Memory Allocation in C Programs | 
|  | 178 |  | 
|  | 179 | The C language supports two kinds of memory allocation through the | 
|  | 180 | variables in C programs: | 
|  | 181 |  | 
|  | 182 | @itemize @bullet | 
|  | 183 | @item | 
|  | 184 | @dfn{Static allocation} is what happens when you declare a static or | 
|  | 185 | global variable.  Each static or global variable defines one block of | 
|  | 186 | space, of a fixed size.  The space is allocated once, when your program | 
|  | 187 | is started (part of the exec operation), and is never freed. | 
|  | 188 | @cindex static memory allocation | 
|  | 189 | @cindex static storage class | 
|  | 190 |  | 
|  | 191 | @item | 
|  | 192 | @dfn{Automatic allocation} happens when you declare an automatic | 
|  | 193 | variable, such as a function argument or a local variable.  The space | 
|  | 194 | for an automatic variable is allocated when the compound statement | 
|  | 195 | containing the declaration is entered, and is freed when that | 
|  | 196 | compound statement is exited. | 
|  | 197 | @cindex automatic memory allocation | 
|  | 198 | @cindex automatic storage class | 
|  | 199 |  | 
|  | 200 | In GNU C, the size of the automatic storage can be an expression | 
|  | 201 | that varies.  In other C implementations, it must be a constant. | 
|  | 202 | @end itemize | 
|  | 203 |  | 
|  | 204 | A third important kind of memory allocation, @dfn{dynamic allocation}, | 
|  | 205 | is not supported by C variables but is available via @glibcadj{} | 
|  | 206 | functions. | 
|  | 207 | @cindex dynamic memory allocation | 
|  | 208 |  | 
|  | 209 | @subsubsection Dynamic Memory Allocation | 
|  | 210 | @cindex dynamic memory allocation | 
|  | 211 |  | 
|  | 212 | @dfn{Dynamic memory allocation} is a technique in which programs | 
|  | 213 | determine as they are running where to store some information.  You need | 
|  | 214 | dynamic allocation when the amount of memory you need, or how long you | 
|  | 215 | continue to need it, depends on factors that are not known before the | 
|  | 216 | program runs. | 
|  | 217 |  | 
|  | 218 | For example, you may need a block to store a line read from an input | 
|  | 219 | file; since there is no limit to how long a line can be, you must | 
|  | 220 | allocate the memory dynamically and make it dynamically larger as you | 
|  | 221 | read more of the line. | 
|  | 222 |  | 
|  | 223 | Or, you may need a block for each record or each definition in the input | 
|  | 224 | data; since you can't know in advance how many there will be, you must | 
|  | 225 | allocate a new block for each record or definition as you read it. | 
|  | 226 |  | 
|  | 227 | When you use dynamic allocation, the allocation of a block of memory is | 
|  | 228 | an action that the program requests explicitly.  You call a function or | 
|  | 229 | macro when you want to allocate space, and specify the size with an | 
|  | 230 | argument.  If you want to free the space, you do so by calling another | 
|  | 231 | function or macro.  You can do these things whenever you want, as often | 
|  | 232 | as you want. | 
|  | 233 |  | 
|  | 234 | Dynamic allocation is not supported by C variables; there is no storage | 
|  | 235 | class ``dynamic'', and there can never be a C variable whose value is | 
|  | 236 | stored in dynamically allocated space.  The only way to get dynamically | 
|  | 237 | allocated memory is via a system call (which is generally via a @glibcadj{} | 
|  | 238 | function call), and the only way to refer to dynamically | 
|  | 239 | allocated space is through a pointer.  Because it is less convenient, | 
|  | 240 | and because the actual process of dynamic allocation requires more | 
|  | 241 | computation time, programmers generally use dynamic allocation only when | 
|  | 242 | neither static nor automatic allocation will serve. | 
|  | 243 |  | 
|  | 244 | For example, if you want to allocate dynamically some space to hold a | 
|  | 245 | @code{struct foobar}, you cannot declare a variable of type @code{struct | 
|  | 246 | foobar} whose contents are the dynamically allocated space.  But you can | 
|  | 247 | declare a variable of pointer type @code{struct foobar *} and assign it the | 
|  | 248 | address of the space.  Then you can use the operators @samp{*} and | 
|  | 249 | @samp{->} on this pointer variable to refer to the contents of the space: | 
|  | 250 |  | 
|  | 251 | @smallexample | 
|  | 252 | @{ | 
|  | 253 | struct foobar *ptr | 
|  | 254 | = (struct foobar *) malloc (sizeof (struct foobar)); | 
|  | 255 | ptr->name = x; | 
|  | 256 | ptr->next = current_foobar; | 
|  | 257 | current_foobar = ptr; | 
|  | 258 | @} | 
|  | 259 | @end smallexample | 
|  | 260 |  | 
|  | 261 | @node Unconstrained Allocation | 
|  | 262 | @subsection Unconstrained Allocation | 
|  | 263 | @cindex unconstrained memory allocation | 
|  | 264 | @cindex @code{malloc} function | 
|  | 265 | @cindex heap, dynamic allocation from | 
|  | 266 |  | 
|  | 267 | The most general dynamic allocation facility is @code{malloc}.  It | 
|  | 268 | allows you to allocate blocks of memory of any size at any time, make | 
|  | 269 | them bigger or smaller at any time, and free the blocks individually at | 
|  | 270 | any time (or never). | 
|  | 271 |  | 
|  | 272 | @menu | 
|  | 273 | * Basic Allocation::            Simple use of @code{malloc}. | 
|  | 274 | * Malloc Examples::             Examples of @code{malloc}.  @code{xmalloc}. | 
|  | 275 | * Freeing after Malloc::        Use @code{free} to free a block you | 
|  | 276 | got with @code{malloc}. | 
|  | 277 | * Changing Block Size::         Use @code{realloc} to make a block | 
|  | 278 | bigger or smaller. | 
|  | 279 | * Allocating Cleared Space::    Use @code{calloc} to allocate a | 
|  | 280 | block and clear it. | 
|  | 281 | * Efficiency and Malloc::       Efficiency considerations in use of | 
|  | 282 | these functions. | 
|  | 283 | * Aligned Memory Blocks::       Allocating specially aligned memory. | 
|  | 284 | * Malloc Tunable Parameters::   Use @code{mallopt} to adjust allocation | 
|  | 285 | parameters. | 
|  | 286 | * Heap Consistency Checking::   Automatic checking for errors. | 
|  | 287 | * Hooks for Malloc::            You can use these hooks for debugging | 
|  | 288 | programs that use @code{malloc}. | 
|  | 289 | * Statistics of Malloc::        Getting information about how much | 
|  | 290 | memory your program is using. | 
|  | 291 | * Summary of Malloc::           Summary of @code{malloc} and related functions. | 
|  | 292 | @end menu | 
|  | 293 |  | 
|  | 294 | @node Basic Allocation | 
|  | 295 | @subsubsection Basic Memory Allocation | 
|  | 296 | @cindex allocation of memory with @code{malloc} | 
|  | 297 |  | 
|  | 298 | To allocate a block of memory, call @code{malloc}.  The prototype for | 
|  | 299 | this function is in @file{stdlib.h}. | 
|  | 300 | @pindex stdlib.h | 
|  | 301 |  | 
|  | 302 | @comment malloc.h stdlib.h | 
|  | 303 | @comment ISO | 
|  | 304 | @deftypefun {void *} malloc (size_t @var{size}) | 
|  | 305 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 306 | @c Malloc hooks and __morecore pointers, as well as such parameters as | 
|  | 307 | @c max_n_mmaps and max_mmapped_mem, are accessed without guards, so they | 
|  | 308 | @c could pose a thread safety issue; in order to not declare malloc | 
|  | 309 | @c MT-unsafe, it's modifying the hooks and parameters while multiple | 
|  | 310 | @c threads are active that is regarded as unsafe.  An arena's next field | 
|  | 311 | @c is initialized and never changed again, except for main_arena's, | 
|  | 312 | @c that's protected by list_lock; next_free is only modified while | 
|  | 313 | @c list_lock is held too.  All other data members of an arena, as well | 
|  | 314 | @c as the metadata of the memory areas assigned to it, are only modified | 
|  | 315 | @c while holding the arena's mutex (fastbin pointers use catomic ops | 
|  | 316 | @c because they may be modified by free without taking the arena's | 
|  | 317 | @c lock).  Some reassurance was needed for fastbins, for it wasn't clear | 
|  | 318 | @c how they were initialized.  It turns out they are always | 
|  | 319 | @c zero-initialized: main_arena's, for being static data, and other | 
|  | 320 | @c arena's, for being just-mmapped memory. | 
|  | 321 |  | 
|  | 322 | @c Leaking file descriptors and memory in case of cancellation is | 
|  | 323 | @c unavoidable without disabling cancellation, but the lock situation is | 
|  | 324 | @c a bit more complicated: we don't have fallback arenas for malloc to | 
|  | 325 | @c be safe to call from within signal handlers.  Error-checking mutexes | 
|  | 326 | @c or trylock could enable us to try and use alternate arenas, even with | 
|  | 327 | @c -DPER_THREAD (enabled by default), but supporting interruption | 
|  | 328 | @c (cancellation or signal handling) while holding the arena list mutex | 
|  | 329 | @c would require more work; maybe blocking signals and disabling async | 
|  | 330 | @c cancellation while manipulating the arena lists? | 
|  | 331 |  | 
|  | 332 | @c __libc_malloc @asulock @aculock @acsfd @acsmem | 
|  | 333 | @c  force_reg ok | 
|  | 334 | @c  *malloc_hook unguarded | 
|  | 335 | @c  arena_lock @asulock @aculock @acsfd @acsmem | 
|  | 336 | @c   mutex_lock @asulock @aculock | 
|  | 337 | @c   arena_get2 @asulock @aculock @acsfd @acsmem | 
|  | 338 | @c    get_free_list @asulock @aculock | 
|  | 339 | @c     mutex_lock (list_lock) dup @asulock @aculock | 
|  | 340 | @c     mutex_unlock (list_lock) dup @aculock | 
|  | 341 | @c     mutex_lock (arena lock) dup @asulock @aculock [returns locked] | 
|  | 342 | @c    __get_nprocs ext ok @acsfd | 
|  | 343 | @c    NARENAS_FROM_NCORES ok | 
|  | 344 | @c    catomic_compare_and_exchange_bool_acq ok | 
|  | 345 | @c    _int_new_arena ok @asulock @aculock @acsmem | 
|  | 346 | @c     new_heap ok @acsmem | 
|  | 347 | @c      mmap ok @acsmem | 
|  | 348 | @c      munmap ok @acsmem | 
|  | 349 | @c      mprotect ok | 
|  | 350 | @c     chunk2mem ok | 
|  | 351 | @c     set_head ok | 
|  | 352 | @c     tsd_setspecific dup ok | 
|  | 353 | @c     mutex_init ok | 
|  | 354 | @c     mutex_lock (just-created mutex) ok, returns locked | 
|  | 355 | @c     mutex_lock (list_lock) dup @asulock @aculock | 
|  | 356 | @c     atomic_write_barrier ok | 
|  | 357 | @c     mutex_unlock (list_lock) @aculock | 
|  | 358 | @c    catomic_decrement ok | 
|  | 359 | @c    reused_arena @asulock @aculock | 
|  | 360 | @c      reads&writes next_to_use and iterates over arena next without guards | 
|  | 361 | @c      those are harmless as long as we don't drop arenas from the | 
|  | 362 | @c      NEXT list, and we never do; when a thread terminates, | 
|  | 363 | @c      arena_thread_freeres prepends the arena to the free_list | 
|  | 364 | @c      NEXT_FREE list, but NEXT is never modified, so it's safe! | 
|  | 365 | @c     mutex_trylock (arena lock) @asulock @aculock | 
|  | 366 | @c     mutex_lock (arena lock) dup @asulock @aculock | 
|  | 367 | @c     tsd_setspecific dup ok | 
|  | 368 | @c  _int_malloc @acsfd @acsmem | 
|  | 369 | @c   checked_request2size ok | 
|  | 370 | @c    REQUEST_OUT_OF_RANGE ok | 
|  | 371 | @c    request2size ok | 
|  | 372 | @c   get_max_fast ok | 
|  | 373 | @c   fastbin_index ok | 
|  | 374 | @c   fastbin ok | 
|  | 375 | @c   catomic_compare_and_exhange_val_acq ok | 
|  | 376 | @c   malloc_printerr dup @mtsenv | 
|  | 377 | @c     if we get to it, we're toast already, undefined behavior must have | 
|  | 378 | @c     been invoked before | 
|  | 379 | @c    libc_message @mtsenv [no leaks with cancellation disabled] | 
|  | 380 | @c     FATAL_PREPARE ok | 
|  | 381 | @c      pthread_setcancelstate disable ok | 
|  | 382 | @c     libc_secure_getenv @mtsenv | 
|  | 383 | @c      getenv @mtsenv | 
|  | 384 | @c     open_not_cancel_2 dup @acsfd | 
|  | 385 | @c     strchrnul ok | 
|  | 386 | @c     WRITEV_FOR_FATAL ok | 
|  | 387 | @c      writev ok | 
|  | 388 | @c     mmap ok @acsmem | 
|  | 389 | @c     munmap ok @acsmem | 
|  | 390 | @c     BEFORE_ABORT @acsfd | 
|  | 391 | @c      backtrace ok | 
|  | 392 | @c      write_not_cancel dup ok | 
|  | 393 | @c      backtrace_symbols_fd @aculock | 
|  | 394 | @c      open_not_cancel_2 dup @acsfd | 
|  | 395 | @c      read_not_cancel dup ok | 
|  | 396 | @c      close_not_cancel_no_status dup @acsfd | 
|  | 397 | @c     abort ok | 
|  | 398 | @c    itoa_word ok | 
|  | 399 | @c    abort ok | 
|  | 400 | @c   check_remalloced_chunk ok/disabled | 
|  | 401 | @c   chunk2mem dup ok | 
|  | 402 | @c   alloc_perturb ok | 
|  | 403 | @c   in_smallbin_range ok | 
|  | 404 | @c   smallbin_index ok | 
|  | 405 | @c   bin_at ok | 
|  | 406 | @c   last ok | 
|  | 407 | @c   malloc_consolidate ok | 
|  | 408 | @c    get_max_fast dup ok | 
|  | 409 | @c    clear_fastchunks ok | 
|  | 410 | @c    unsorted_chunks dup ok | 
|  | 411 | @c    fastbin dup ok | 
|  | 412 | @c    atomic_exchange_acq ok | 
|  | 413 | @c    check_inuse_chunk dup ok/disabled | 
|  | 414 | @c    chunk_at_offset dup ok | 
|  | 415 | @c    chunksize dup ok | 
|  | 416 | @c    inuse_bit_at_offset dup ok | 
|  | 417 | @c    unlink dup ok | 
|  | 418 | @c    clear_inuse_bit_at_offset dup ok | 
|  | 419 | @c    in_smallbin_range dup ok | 
|  | 420 | @c    set_head dup ok | 
|  | 421 | @c    malloc_init_state ok | 
|  | 422 | @c     bin_at dup ok | 
|  | 423 | @c     set_noncontiguous dup ok | 
|  | 424 | @c     set_max_fast dup ok | 
|  | 425 | @c     initial_top ok | 
|  | 426 | @c      unsorted_chunks dup ok | 
|  | 427 | @c    check_malloc_state ok/disabled | 
|  | 428 | @c   set_inuse_bit_at_offset ok | 
|  | 429 | @c   check_malloced_chunk ok/disabled | 
|  | 430 | @c   largebin_index ok | 
|  | 431 | @c   have_fastchunks ok | 
|  | 432 | @c   unsorted_chunks ok | 
|  | 433 | @c    bin_at ok | 
|  | 434 | @c   chunksize ok | 
|  | 435 | @c   chunk_at_offset ok | 
|  | 436 | @c   set_head ok | 
|  | 437 | @c   set_foot ok | 
|  | 438 | @c   mark_bin ok | 
|  | 439 | @c    idx2bit ok | 
|  | 440 | @c   first ok | 
|  | 441 | @c   unlink ok | 
|  | 442 | @c    malloc_printerr dup ok | 
|  | 443 | @c    in_smallbin_range dup ok | 
|  | 444 | @c   idx2block ok | 
|  | 445 | @c   idx2bit dup ok | 
|  | 446 | @c   next_bin ok | 
|  | 447 | @c   sysmalloc @acsfd @acsmem | 
|  | 448 | @c    MMAP @acsmem | 
|  | 449 | @c    set_head dup ok | 
|  | 450 | @c    check_chunk ok/disabled | 
|  | 451 | @c    chunk2mem dup ok | 
|  | 452 | @c    chunksize dup ok | 
|  | 453 | @c    chunk_at_offset dup ok | 
|  | 454 | @c    heap_for_ptr ok | 
|  | 455 | @c    grow_heap ok | 
|  | 456 | @c     mprotect ok | 
|  | 457 | @c    set_head dup ok | 
|  | 458 | @c    new_heap @acsmem | 
|  | 459 | @c     MMAP dup @acsmem | 
|  | 460 | @c     munmap @acsmem | 
|  | 461 | @c    top ok | 
|  | 462 | @c    set_foot dup ok | 
|  | 463 | @c    contiguous ok | 
|  | 464 | @c    MORECORE ok | 
|  | 465 | @c     *__morecore ok unguarded | 
|  | 466 | @c      __default_morecore | 
|  | 467 | @c       sbrk ok | 
|  | 468 | @c    force_reg dup ok | 
|  | 469 | @c    *__after_morecore_hook unguarded | 
|  | 470 | @c    set_noncontiguous ok | 
|  | 471 | @c    malloc_printerr dup ok | 
|  | 472 | @c    _int_free (have_lock) @acsfd @acsmem [@asulock @aculock] | 
|  | 473 | @c     chunksize dup ok | 
|  | 474 | @c     mutex_unlock dup @aculock/!have_lock | 
|  | 475 | @c     malloc_printerr dup ok | 
|  | 476 | @c     check_inuse_chunk ok/disabled | 
|  | 477 | @c     chunk_at_offset dup ok | 
|  | 478 | @c     mutex_lock dup @asulock @aculock/@have_lock | 
|  | 479 | @c     chunk2mem dup ok | 
|  | 480 | @c     free_perturb ok | 
|  | 481 | @c     set_fastchunks ok | 
|  | 482 | @c      catomic_and ok | 
|  | 483 | @c     fastbin_index dup ok | 
|  | 484 | @c     fastbin dup ok | 
|  | 485 | @c     catomic_compare_and_exchange_val_rel ok | 
|  | 486 | @c     chunk_is_mmapped ok | 
|  | 487 | @c     contiguous dup ok | 
|  | 488 | @c     prev_inuse ok | 
|  | 489 | @c     unlink dup ok | 
|  | 490 | @c     inuse_bit_at_offset dup ok | 
|  | 491 | @c     clear_inuse_bit_at_offset ok | 
|  | 492 | @c     unsorted_chunks dup ok | 
|  | 493 | @c     in_smallbin_range dup ok | 
|  | 494 | @c     set_head dup ok | 
|  | 495 | @c     set_foot dup ok | 
|  | 496 | @c     check_free_chunk ok/disabled | 
|  | 497 | @c     check_chunk dup ok/disabled | 
|  | 498 | @c     have_fastchunks dup ok | 
|  | 499 | @c     malloc_consolidate dup ok | 
|  | 500 | @c     systrim ok | 
|  | 501 | @c      MORECORE dup ok | 
|  | 502 | @c      *__after_morecore_hook dup unguarded | 
|  | 503 | @c      set_head dup ok | 
|  | 504 | @c      check_malloc_state ok/disabled | 
|  | 505 | @c     top dup ok | 
|  | 506 | @c     heap_for_ptr dup ok | 
|  | 507 | @c     heap_trim @acsfd @acsmem | 
|  | 508 | @c      top dup ok | 
|  | 509 | @c      chunk_at_offset dup ok | 
|  | 510 | @c      prev_chunk ok | 
|  | 511 | @c      chunksize dup ok | 
|  | 512 | @c      prev_inuse dup ok | 
|  | 513 | @c      delete_heap @acsmem | 
|  | 514 | @c       munmap dup @acsmem | 
|  | 515 | @c      unlink dup ok | 
|  | 516 | @c      set_head dup ok | 
|  | 517 | @c      shrink_heap @acsfd | 
|  | 518 | @c       check_may_shrink_heap @acsfd | 
|  | 519 | @c        open_not_cancel_2 @acsfd | 
|  | 520 | @c        read_not_cancel ok | 
|  | 521 | @c        close_not_cancel_no_status @acsfd | 
|  | 522 | @c       MMAP dup ok | 
|  | 523 | @c       madvise ok | 
|  | 524 | @c     munmap_chunk @acsmem | 
|  | 525 | @c      chunksize dup ok | 
|  | 526 | @c      chunk_is_mmapped dup ok | 
|  | 527 | @c      chunk2mem dup ok | 
|  | 528 | @c      malloc_printerr dup ok | 
|  | 529 | @c      munmap dup @acsmem | 
|  | 530 | @c    check_malloc_state ok/disabled | 
|  | 531 | @c  arena_get_retry @asulock @aculock @acsfd @acsmem | 
|  | 532 | @c   mutex_unlock dup @aculock | 
|  | 533 | @c   mutex_lock dup @asulock @aculock | 
|  | 534 | @c   arena_get2 dup @asulock @aculock @acsfd @acsmem | 
|  | 535 | @c  mutex_unlock @aculock | 
|  | 536 | @c  mem2chunk ok | 
|  | 537 | @c  chunk_is_mmapped ok | 
|  | 538 | @c  arena_for_chunk ok | 
|  | 539 | @c   chunk_non_main_arena ok | 
|  | 540 | @c   heap_for_ptr ok | 
|  | 541 | This function returns a pointer to a newly allocated block @var{size} | 
|  | 542 | bytes long, or a null pointer if the block could not be allocated. | 
|  | 543 | @end deftypefun | 
|  | 544 |  | 
|  | 545 | The contents of the block are undefined; you must initialize it yourself | 
|  | 546 | (or use @code{calloc} instead; @pxref{Allocating Cleared Space}). | 
|  | 547 | Normally you would cast the value as a pointer to the kind of object | 
|  | 548 | that you want to store in the block.  Here we show an example of doing | 
|  | 549 | so, and of initializing the space with zeros using the library function | 
|  | 550 | @code{memset} (@pxref{Copying Strings and Arrays}): | 
|  | 551 |  | 
|  | 552 | @smallexample | 
|  | 553 | struct foo *ptr; | 
|  | 554 | @dots{} | 
|  | 555 | ptr = (struct foo *) malloc (sizeof (struct foo)); | 
|  | 556 | if (ptr == 0) abort (); | 
|  | 557 | memset (ptr, 0, sizeof (struct foo)); | 
|  | 558 | @end smallexample | 
|  | 559 |  | 
|  | 560 | You can store the result of @code{malloc} into any pointer variable | 
|  | 561 | without a cast, because @w{ISO C} automatically converts the type | 
|  | 562 | @code{void *} to another type of pointer when necessary.  But the cast | 
|  | 563 | is necessary in contexts other than assignment operators or if you might | 
|  | 564 | want your code to run in traditional C. | 
|  | 565 |  | 
|  | 566 | Remember that when allocating space for a string, the argument to | 
|  | 567 | @code{malloc} must be one plus the length of the string.  This is | 
|  | 568 | because a string is terminated with a null character that doesn't count | 
|  | 569 | in the ``length'' of the string but does need space.  For example: | 
|  | 570 |  | 
|  | 571 | @smallexample | 
|  | 572 | char *ptr; | 
|  | 573 | @dots{} | 
|  | 574 | ptr = (char *) malloc (length + 1); | 
|  | 575 | @end smallexample | 
|  | 576 |  | 
|  | 577 | @noindent | 
|  | 578 | @xref{Representation of Strings}, for more information about this. | 
|  | 579 |  | 
|  | 580 | @node Malloc Examples | 
|  | 581 | @subsubsection Examples of @code{malloc} | 
|  | 582 |  | 
|  | 583 | If no more space is available, @code{malloc} returns a null pointer. | 
|  | 584 | You should check the value of @emph{every} call to @code{malloc}.  It is | 
|  | 585 | useful to write a subroutine that calls @code{malloc} and reports an | 
|  | 586 | error if the value is a null pointer, returning only if the value is | 
|  | 587 | nonzero.  This function is conventionally called @code{xmalloc}.  Here | 
|  | 588 | it is: | 
|  | 589 |  | 
|  | 590 | @smallexample | 
|  | 591 | void * | 
|  | 592 | xmalloc (size_t size) | 
|  | 593 | @{ | 
|  | 594 | void *value = malloc (size); | 
|  | 595 | if (value == 0) | 
|  | 596 | fatal ("virtual memory exhausted"); | 
|  | 597 | return value; | 
|  | 598 | @} | 
|  | 599 | @end smallexample | 
|  | 600 |  | 
|  | 601 | Here is a real example of using @code{malloc} (by way of @code{xmalloc}). | 
|  | 602 | The function @code{savestring} will copy a sequence of characters into | 
|  | 603 | a newly allocated null-terminated string: | 
|  | 604 |  | 
|  | 605 | @smallexample | 
|  | 606 | @group | 
|  | 607 | char * | 
|  | 608 | savestring (const char *ptr, size_t len) | 
|  | 609 | @{ | 
|  | 610 | char *value = (char *) xmalloc (len + 1); | 
|  | 611 | value[len] = '\0'; | 
|  | 612 | return (char *) memcpy (value, ptr, len); | 
|  | 613 | @} | 
|  | 614 | @end group | 
|  | 615 | @end smallexample | 
|  | 616 |  | 
|  | 617 | The block that @code{malloc} gives you is guaranteed to be aligned so | 
|  | 618 | that it can hold any type of data.  On @gnusystems{}, the address is | 
|  | 619 | always a multiple of eight on 32-bit systems, and a multiple of 16 on | 
|  | 620 | 64-bit systems.  Only rarely is any higher boundary (such as a page | 
|  | 621 | boundary) necessary; for those cases, use @code{aligned_alloc} or | 
|  | 622 | @code{posix_memalign} (@pxref{Aligned Memory Blocks}). | 
|  | 623 |  | 
|  | 624 | Note that the memory located after the end of the block is likely to be | 
|  | 625 | in use for something else; perhaps a block already allocated by another | 
|  | 626 | call to @code{malloc}.  If you attempt to treat the block as longer than | 
|  | 627 | you asked for it to be, you are liable to destroy the data that | 
|  | 628 | @code{malloc} uses to keep track of its blocks, or you may destroy the | 
|  | 629 | contents of another block.  If you have already allocated a block and | 
|  | 630 | discover you want it to be bigger, use @code{realloc} (@pxref{Changing | 
|  | 631 | Block Size}). | 
|  | 632 |  | 
|  | 633 | @node Freeing after Malloc | 
|  | 634 | @subsubsection Freeing Memory Allocated with @code{malloc} | 
|  | 635 | @cindex freeing memory allocated with @code{malloc} | 
|  | 636 | @cindex heap, freeing memory from | 
|  | 637 |  | 
|  | 638 | When you no longer need a block that you got with @code{malloc}, use the | 
|  | 639 | function @code{free} to make the block available to be allocated again. | 
|  | 640 | The prototype for this function is in @file{stdlib.h}. | 
|  | 641 | @pindex stdlib.h | 
|  | 642 |  | 
|  | 643 | @comment malloc.h stdlib.h | 
|  | 644 | @comment ISO | 
|  | 645 | @deftypefun void free (void *@var{ptr}) | 
|  | 646 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 647 | @c __libc_free @asulock @aculock @acsfd @acsmem | 
|  | 648 | @c   releasing memory into fastbins modifies the arena without taking | 
|  | 649 | @c   its mutex, but catomic operations ensure safety.  If two (or more) | 
|  | 650 | @c   threads are running malloc and have their own arenas locked when | 
|  | 651 | @c   each gets a signal whose handler free()s large (non-fastbin-able) | 
|  | 652 | @c   blocks from each other's arena, we deadlock; this is a more general | 
|  | 653 | @c   case of @asulock. | 
|  | 654 | @c  *__free_hook unguarded | 
|  | 655 | @c  mem2chunk ok | 
|  | 656 | @c  chunk_is_mmapped ok, chunk bits not modified after allocation | 
|  | 657 | @c  chunksize ok | 
|  | 658 | @c  munmap_chunk dup @acsmem | 
|  | 659 | @c  arena_for_chunk dup ok | 
|  | 660 | @c  _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem | 
|  | 661 | The @code{free} function deallocates the block of memory pointed at | 
|  | 662 | by @var{ptr}. | 
|  | 663 | @end deftypefun | 
|  | 664 |  | 
|  | 665 | @comment stdlib.h | 
|  | 666 | @comment Sun | 
|  | 667 | @deftypefun void cfree (void *@var{ptr}) | 
|  | 668 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 669 | @c alias to free | 
|  | 670 | This function does the same thing as @code{free}.  It's provided for | 
|  | 671 | backward compatibility with SunOS; you should use @code{free} instead. | 
|  | 672 | @end deftypefun | 
|  | 673 |  | 
|  | 674 | Freeing a block alters the contents of the block.  @strong{Do not expect to | 
|  | 675 | find any data (such as a pointer to the next block in a chain of blocks) in | 
|  | 676 | the block after freeing it.}  Copy whatever you need out of the block before | 
|  | 677 | freeing it!  Here is an example of the proper way to free all the blocks in | 
|  | 678 | a chain, and the strings that they point to: | 
|  | 679 |  | 
|  | 680 | @smallexample | 
|  | 681 | struct chain | 
|  | 682 | @{ | 
|  | 683 | struct chain *next; | 
|  | 684 | char *name; | 
|  | 685 | @} | 
|  | 686 |  | 
|  | 687 | void | 
|  | 688 | free_chain (struct chain *chain) | 
|  | 689 | @{ | 
|  | 690 | while (chain != 0) | 
|  | 691 | @{ | 
|  | 692 | struct chain *next = chain->next; | 
|  | 693 | free (chain->name); | 
|  | 694 | free (chain); | 
|  | 695 | chain = next; | 
|  | 696 | @} | 
|  | 697 | @} | 
|  | 698 | @end smallexample | 
|  | 699 |  | 
|  | 700 | Occasionally, @code{free} can actually return memory to the operating | 
|  | 701 | system and make the process smaller.  Usually, all it can do is allow a | 
|  | 702 | later call to @code{malloc} to reuse the space.  In the meantime, the | 
|  | 703 | space remains in your program as part of a free-list used internally by | 
|  | 704 | @code{malloc}. | 
|  | 705 |  | 
|  | 706 | There is no point in freeing blocks at the end of a program, because all | 
|  | 707 | of the program's space is given back to the system when the process | 
|  | 708 | terminates. | 
|  | 709 |  | 
|  | 710 | @node Changing Block Size | 
|  | 711 | @subsubsection Changing the Size of a Block | 
|  | 712 | @cindex changing the size of a block (@code{malloc}) | 
|  | 713 |  | 
|  | 714 | Often you do not know for certain how big a block you will ultimately need | 
|  | 715 | at the time you must begin to use the block.  For example, the block might | 
|  | 716 | be a buffer that you use to hold a line being read from a file; no matter | 
|  | 717 | how long you make the buffer initially, you may encounter a line that is | 
|  | 718 | longer. | 
|  | 719 |  | 
|  | 720 | You can make the block longer by calling @code{realloc}.  This function | 
|  | 721 | is declared in @file{stdlib.h}. | 
|  | 722 | @pindex stdlib.h | 
|  | 723 |  | 
|  | 724 | @comment malloc.h stdlib.h | 
|  | 725 | @comment ISO | 
|  | 726 | @deftypefun {void *} realloc (void *@var{ptr}, size_t @var{newsize}) | 
|  | 727 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 728 | @c It may call the implementations of malloc and free, so all of their | 
|  | 729 | @c issues arise, plus the realloc hook, also accessed without guards. | 
|  | 730 |  | 
|  | 731 | @c __libc_realloc @asulock @aculock @acsfd @acsmem | 
|  | 732 | @c  *__realloc_hook unguarded | 
|  | 733 | @c  __libc_free dup @asulock @aculock @acsfd @acsmem | 
|  | 734 | @c  __libc_malloc dup @asulock @aculock @acsfd @acsmem | 
|  | 735 | @c  mem2chunk dup ok | 
|  | 736 | @c  chunksize dup ok | 
|  | 737 | @c  malloc_printerr dup ok | 
|  | 738 | @c  checked_request2size dup ok | 
|  | 739 | @c  chunk_is_mmapped dup ok | 
|  | 740 | @c  mremap_chunk | 
|  | 741 | @c   chunksize dup ok | 
|  | 742 | @c   __mremap ok | 
|  | 743 | @c   set_head dup ok | 
|  | 744 | @c  MALLOC_COPY ok | 
|  | 745 | @c   memcpy ok | 
|  | 746 | @c  munmap_chunk dup @acsmem | 
|  | 747 | @c  arena_for_chunk dup ok | 
|  | 748 | @c  mutex_lock (arena mutex) dup @asulock @aculock | 
|  | 749 | @c  _int_realloc @acsfd @acsmem | 
|  | 750 | @c   malloc_printerr dup ok | 
|  | 751 | @c   check_inuse_chunk dup ok/disabled | 
|  | 752 | @c   chunk_at_offset dup ok | 
|  | 753 | @c   chunksize dup ok | 
|  | 754 | @c   set_head_size dup ok | 
|  | 755 | @c   chunk_at_offset dup ok | 
|  | 756 | @c   set_head dup ok | 
|  | 757 | @c   chunk2mem dup ok | 
|  | 758 | @c   inuse dup ok | 
|  | 759 | @c   unlink dup ok | 
|  | 760 | @c   _int_malloc dup @acsfd @acsmem | 
|  | 761 | @c   mem2chunk dup ok | 
|  | 762 | @c   MALLOC_COPY dup ok | 
|  | 763 | @c   _int_free (have_lock) dup @acsfd @acsmem | 
|  | 764 | @c   set_inuse_bit_at_offset dup ok | 
|  | 765 | @c   set_head dup ok | 
|  | 766 | @c  mutex_unlock (arena mutex) dup @aculock | 
|  | 767 | @c  _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem | 
|  | 768 |  | 
|  | 769 | The @code{realloc} function changes the size of the block whose address is | 
|  | 770 | @var{ptr} to be @var{newsize}. | 
|  | 771 |  | 
|  | 772 | Since the space after the end of the block may be in use, @code{realloc} | 
|  | 773 | may find it necessary to copy the block to a new address where more free | 
|  | 774 | space is available.  The value of @code{realloc} is the new address of the | 
|  | 775 | block.  If the block needs to be moved, @code{realloc} copies the old | 
|  | 776 | contents. | 
|  | 777 |  | 
|  | 778 | If you pass a null pointer for @var{ptr}, @code{realloc} behaves just | 
|  | 779 | like @samp{malloc (@var{newsize})}.  This can be convenient, but beware | 
|  | 780 | that older implementations (before @w{ISO C}) may not support this | 
|  | 781 | behavior, and will probably crash when @code{realloc} is passed a null | 
|  | 782 | pointer. | 
|  | 783 | @end deftypefun | 
|  | 784 |  | 
|  | 785 | Like @code{malloc}, @code{realloc} may return a null pointer if no | 
|  | 786 | memory space is available to make the block bigger.  When this happens, | 
|  | 787 | the original block is untouched; it has not been modified or relocated. | 
|  | 788 |  | 
|  | 789 | In most cases it makes no difference what happens to the original block | 
|  | 790 | when @code{realloc} fails, because the application program cannot continue | 
|  | 791 | when it is out of memory, and the only thing to do is to give a fatal error | 
|  | 792 | message.  Often it is convenient to write and use a subroutine, | 
|  | 793 | conventionally called @code{xrealloc}, that takes care of the error message | 
|  | 794 | as @code{xmalloc} does for @code{malloc}: | 
|  | 795 |  | 
|  | 796 | @smallexample | 
|  | 797 | void * | 
|  | 798 | xrealloc (void *ptr, size_t size) | 
|  | 799 | @{ | 
|  | 800 | void *value = realloc (ptr, size); | 
|  | 801 | if (value == 0) | 
|  | 802 | fatal ("Virtual memory exhausted"); | 
|  | 803 | return value; | 
|  | 804 | @} | 
|  | 805 | @end smallexample | 
|  | 806 |  | 
|  | 807 | You can also use @code{realloc} to make a block smaller.  The reason you | 
|  | 808 | would do this is to avoid tying up a lot of memory space when only a little | 
|  | 809 | is needed. | 
|  | 810 | @comment The following is no longer true with the new malloc. | 
|  | 811 | @comment But it seems wise to keep the warning for other implementations. | 
|  | 812 | In several allocation implementations, making a block smaller sometimes | 
|  | 813 | necessitates copying it, so it can fail if no other space is available. | 
|  | 814 |  | 
|  | 815 | If the new size you specify is the same as the old size, @code{realloc} | 
|  | 816 | is guaranteed to change nothing and return the same address that you gave. | 
|  | 817 |  | 
|  | 818 | @node Allocating Cleared Space | 
|  | 819 | @subsubsection Allocating Cleared Space | 
|  | 820 |  | 
|  | 821 | The function @code{calloc} allocates memory and clears it to zero.  It | 
|  | 822 | is declared in @file{stdlib.h}. | 
|  | 823 | @pindex stdlib.h | 
|  | 824 |  | 
|  | 825 | @comment malloc.h stdlib.h | 
|  | 826 | @comment ISO | 
|  | 827 | @deftypefun {void *} calloc (size_t @var{count}, size_t @var{eltsize}) | 
|  | 828 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 829 | @c Same caveats as malloc. | 
|  | 830 |  | 
|  | 831 | @c __libc_calloc @asulock @aculock @acsfd @acsmem | 
|  | 832 | @c  *__malloc_hook dup unguarded | 
|  | 833 | @c  memset dup ok | 
|  | 834 | @c  arena_get @asulock @aculock @acsfd @acsmem | 
|  | 835 | @c   arena_lock dup @asulock @aculock @acsfd @acsmem | 
|  | 836 | @c  top dup ok | 
|  | 837 | @c  chunksize dup ok | 
|  | 838 | @c  heap_for_ptr dup ok | 
|  | 839 | @c  _int_malloc dup @acsfd @acsmem | 
|  | 840 | @c  arena_get_retry dup @asulock @aculock @acsfd @acsmem | 
|  | 841 | @c  mutex_unlock dup @aculock | 
|  | 842 | @c  mem2chunk dup ok | 
|  | 843 | @c  chunk_is_mmapped dup ok | 
|  | 844 | @c  MALLOC_ZERO ok | 
|  | 845 | @c   memset dup ok | 
|  | 846 | This function allocates a block long enough to contain a vector of | 
|  | 847 | @var{count} elements, each of size @var{eltsize}.  Its contents are | 
|  | 848 | cleared to zero before @code{calloc} returns. | 
|  | 849 | @end deftypefun | 
|  | 850 |  | 
|  | 851 | You could define @code{calloc} as follows: | 
|  | 852 |  | 
|  | 853 | @smallexample | 
|  | 854 | void * | 
|  | 855 | calloc (size_t count, size_t eltsize) | 
|  | 856 | @{ | 
|  | 857 | size_t size = count * eltsize; | 
|  | 858 | void *value = malloc (size); | 
|  | 859 | if (value != 0) | 
|  | 860 | memset (value, 0, size); | 
|  | 861 | return value; | 
|  | 862 | @} | 
|  | 863 | @end smallexample | 
|  | 864 |  | 
|  | 865 | But in general, it is not guaranteed that @code{calloc} calls | 
|  | 866 | @code{malloc} internally.  Therefore, if an application provides its own | 
|  | 867 | @code{malloc}/@code{realloc}/@code{free} outside the C library, it | 
|  | 868 | should always define @code{calloc}, too. | 
|  | 869 |  | 
|  | 870 | @node Efficiency and Malloc | 
|  | 871 | @subsubsection Efficiency Considerations for @code{malloc} | 
|  | 872 | @cindex efficiency and @code{malloc} | 
|  | 873 |  | 
|  | 874 |  | 
|  | 875 |  | 
|  | 876 |  | 
|  | 877 | @ignore | 
|  | 878 |  | 
|  | 879 | @c No longer true, see below instead. | 
|  | 880 | To make the best use of @code{malloc}, it helps to know that the GNU | 
|  | 881 | version of @code{malloc} always dispenses small amounts of memory in | 
|  | 882 | blocks whose sizes are powers of two.  It keeps separate pools for each | 
|  | 883 | power of two.  This holds for sizes up to a page size.  Therefore, if | 
|  | 884 | you are free to choose the size of a small block in order to make | 
|  | 885 | @code{malloc} more efficient, make it a power of two. | 
|  | 886 | @c !!! xref getpagesize | 
|  | 887 |  | 
|  | 888 | Once a page is split up for a particular block size, it can't be reused | 
|  | 889 | for another size unless all the blocks in it are freed.  In many | 
|  | 890 | programs, this is unlikely to happen.  Thus, you can sometimes make a | 
|  | 891 | program use memory more efficiently by using blocks of the same size for | 
|  | 892 | many different purposes. | 
|  | 893 |  | 
|  | 894 | When you ask for memory blocks of a page or larger, @code{malloc} uses a | 
|  | 895 | different strategy; it rounds the size up to a multiple of a page, and | 
|  | 896 | it can coalesce and split blocks as needed. | 
|  | 897 |  | 
|  | 898 | The reason for the two strategies is that it is important to allocate | 
|  | 899 | and free small blocks as fast as possible, but speed is less important | 
|  | 900 | for a large block since the program normally spends a fair amount of | 
|  | 901 | time using it.  Also, large blocks are normally fewer in number. | 
|  | 902 | Therefore, for large blocks, it makes sense to use a method which takes | 
|  | 903 | more time to minimize the wasted space. | 
|  | 904 |  | 
|  | 905 | @end ignore | 
|  | 906 |  | 
|  | 907 | As opposed to other versions, the @code{malloc} in @theglibc{} | 
|  | 908 | does not round up block sizes to powers of two, neither for large nor | 
|  | 909 | for small sizes.  Neighboring chunks can be coalesced on a @code{free} | 
|  | 910 | no matter what their size is.  This makes the implementation suitable | 
|  | 911 | for all kinds of allocation patterns without generally incurring high | 
|  | 912 | memory waste through fragmentation. | 
|  | 913 |  | 
|  | 914 | Very large blocks (much larger than a page) are allocated with | 
|  | 915 | @code{mmap} (anonymous or via @code{/dev/zero}) by this implementation. | 
|  | 916 | This has the great advantage that these chunks are returned to the | 
|  | 917 | system immediately when they are freed.  Therefore, it cannot happen | 
|  | 918 | that a large chunk becomes ``locked'' in between smaller ones and even | 
|  | 919 | after calling @code{free} wastes memory.  The size threshold for | 
|  | 920 | @code{mmap} to be used can be adjusted with @code{mallopt}.  The use of | 
|  | 921 | @code{mmap} can also be disabled completely. | 
|  | 922 |  | 
|  | 923 | @node Aligned Memory Blocks | 
|  | 924 | @subsubsection Allocating Aligned Memory Blocks | 
|  | 925 |  | 
|  | 926 | @cindex page boundary | 
|  | 927 | @cindex alignment (with @code{malloc}) | 
|  | 928 | @pindex stdlib.h | 
|  | 929 | The address of a block returned by @code{malloc} or @code{realloc} in | 
|  | 930 | @gnusystems{} is always a multiple of eight (or sixteen on 64-bit | 
|  | 931 | systems).  If you need a block whose address is a multiple of a higher | 
|  | 932 | power of two than that, use @code{aligned_alloc} or @code{posix_memalign}. | 
|  | 933 | @code{aligned_alloc} and @code{posix_memalign} are declared in | 
|  | 934 | @file{stdlib.h}. | 
|  | 935 |  | 
|  | 936 | @comment stdlib.h | 
|  | 937 | @deftypefun {void *} aligned_alloc (size_t @var{alignment}, size_t @var{size}) | 
|  | 938 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 939 | @c Alias to memalign. | 
|  | 940 | The @code{aligned_alloc} function allocates a block of @var{size} bytes whose | 
|  | 941 | address is a multiple of @var{alignment}.  The @var{alignment} must be a | 
|  | 942 | power of two and @var{size} must be a multiple of @var{alignment}. | 
|  | 943 |  | 
|  | 944 | The @code{aligned_alloc} function returns a null pointer on error and sets | 
|  | 945 | @code{errno} to one of the following values: | 
|  | 946 |  | 
|  | 947 | @table @code | 
|  | 948 | @item ENOMEM | 
|  | 949 | There was insufficient memory available to satisfy the request. | 
|  | 950 |  | 
|  | 951 | @item EINVAL | 
|  | 952 | @var{alignment} is not a power of two. | 
|  | 953 |  | 
|  | 954 | This function was introduced in @w{ISO C11} and hence may have better | 
|  | 955 | portability to modern non-POSIX systems than @code{posix_memalign}. | 
|  | 956 | @end table | 
|  | 957 |  | 
|  | 958 | @end deftypefun | 
|  | 959 |  | 
|  | 960 | @comment malloc.h | 
|  | 961 | @comment BSD | 
|  | 962 | @deftypefun {void *} memalign (size_t @var{boundary}, size_t @var{size}) | 
|  | 963 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 964 | @c Same issues as malloc.  The padding bytes are safely freed in | 
|  | 965 | @c _int_memalign, with the arena still locked. | 
|  | 966 |  | 
|  | 967 | @c __libc_memalign @asulock @aculock @acsfd @acsmem | 
|  | 968 | @c  *__memalign_hook dup unguarded | 
|  | 969 | @c  __libc_malloc dup @asulock @aculock @acsfd @acsmem | 
|  | 970 | @c  arena_get dup @asulock @aculock @acsfd @acsmem | 
|  | 971 | @c  _int_memalign @acsfd @acsmem | 
|  | 972 | @c   _int_malloc dup @acsfd @acsmem | 
|  | 973 | @c   checked_request2size dup ok | 
|  | 974 | @c   mem2chunk dup ok | 
|  | 975 | @c   chunksize dup ok | 
|  | 976 | @c   chunk_is_mmapped dup ok | 
|  | 977 | @c   set_head dup ok | 
|  | 978 | @c   chunk2mem dup ok | 
|  | 979 | @c   set_inuse_bit_at_offset dup ok | 
|  | 980 | @c   set_head_size dup ok | 
|  | 981 | @c   _int_free (have_lock) dup @acsfd @acsmem | 
|  | 982 | @c   chunk_at_offset dup ok | 
|  | 983 | @c   check_inuse_chunk dup ok | 
|  | 984 | @c  arena_get_retry dup @asulock @aculock @acsfd @acsmem | 
|  | 985 | @c  mutex_unlock dup @aculock | 
|  | 986 | The @code{memalign} function allocates a block of @var{size} bytes whose | 
|  | 987 | address is a multiple of @var{boundary}.  The @var{boundary} must be a | 
|  | 988 | power of two!  The function @code{memalign} works by allocating a | 
|  | 989 | somewhat larger block, and then returning an address within the block | 
|  | 990 | that is on the specified boundary. | 
|  | 991 |  | 
|  | 992 | The @code{memalign} function returns a null pointer on error and sets | 
|  | 993 | @code{errno} to one of the following values: | 
|  | 994 |  | 
|  | 995 | @table @code | 
|  | 996 | @item ENOMEM | 
|  | 997 | There was insufficient memory available to satisfy the request. | 
|  | 998 |  | 
|  | 999 | @item EINVAL | 
|  | 1000 | @var{alignment} is not a power of two. | 
|  | 1001 |  | 
|  | 1002 | @end table | 
|  | 1003 |  | 
|  | 1004 | The @code{memalign} function is obsolete and @code{aligned_alloc} or | 
|  | 1005 | @code{posix_memalign} should be used instead. | 
|  | 1006 | @end deftypefun | 
|  | 1007 |  | 
|  | 1008 | @comment stdlib.h | 
|  | 1009 | @comment POSIX | 
|  | 1010 | @deftypefun int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size}) | 
|  | 1011 | @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} | 
|  | 1012 | @c Calls memalign unless the requirements are not met (powerof2 macro is | 
|  | 1013 | @c safe given an automatic variable as an argument) or there's a | 
|  | 1014 | @c memalign hook (accessed unguarded, but safely). | 
|  | 1015 | The @code{posix_memalign} function is similar to the @code{memalign} | 
|  | 1016 | function in that it returns a buffer of @var{size} bytes aligned to a | 
|  | 1017 | multiple of @var{alignment}.  But it adds one requirement to the | 
|  | 1018 | parameter @var{alignment}: the value must be a power of two multiple of | 
|  | 1019 | @code{sizeof (void *)}. | 
|  | 1020 |  | 
|  | 1021 | If the function succeeds in allocation memory a pointer to the allocated | 
|  | 1022 | memory is returned in @code{*@var{memptr}} and the return value is zero. | 
|  | 1023 | Otherwise the function returns an error value indicating the problem. | 
|  | 1024 | The possible error values returned are: | 
|  | 1025 |  | 
|  | 1026 | @table @code | 
|  | 1027 | @item ENOMEM | 
|  | 1028 | There was insufficient memory available to satisfy the request. | 
|  | 1029 |  | 
|  | 1030 | @item EINVAL | 
|  | 1031 | @var{alignment} is not a power of two multiple of @code{sizeof (void *)}. | 
|  | 1032 |  | 
|  | 1033 | @end table | 
|  | 1034 |  | 
|  | 1035 | This function was introduced in POSIX 1003.1d.  Although this function is | 
|  | 1036 | superseded by @code{aligned_alloc}, it is more portable to older POSIX | 
|  | 1037 | systems that do not support @w{ISO C11}. | 
|  | 1038 | @end deftypefun | 
|  | 1039 |  | 
|  | 1040 | @comment malloc.h stdlib.h | 
|  | 1041 | @comment BSD | 
|  | 1042 | @deftypefun {void *} valloc (size_t @var{size}) | 
|  | 1043 | @safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{} @acsfd{} @acsmem{}}} | 
|  | 1044 | @c __libc_valloc @mtuinit @asuinit @asulock @aculock @acsfd @acsmem | 
|  | 1045 | @c  ptmalloc_init (once) @mtsenv @asulock @aculock @acsfd @acsmem | 
|  | 1046 | @c   _dl_addr @asucorrupt? @aculock | 
|  | 1047 | @c    __rtld_lock_lock_recursive (dl_load_lock) @asucorrupt? @aculock | 
|  | 1048 | @c    _dl_find_dso_for_object ok, iterates over dl_ns and its _ns_loaded objs | 
|  | 1049 | @c      the ok above assumes no partial updates on dl_ns and _ns_loaded | 
|  | 1050 | @c      that could confuse a _dl_addr call in a signal handler | 
|  | 1051 | @c     _dl_addr_inside_object ok | 
|  | 1052 | @c    determine_info ok | 
|  | 1053 | @c    __rtld_lock_unlock_recursive (dl_load_lock) @aculock | 
|  | 1054 | @c   thread_atfork @asulock @aculock @acsfd @acsmem | 
|  | 1055 | @c    __register_atfork @asulock @aculock @acsfd @acsmem | 
|  | 1056 | @c     lll_lock (__fork_lock) @asulock @aculock | 
|  | 1057 | @c     fork_handler_alloc @asulock @aculock @acsfd @acsmem | 
|  | 1058 | @c      calloc dup @asulock @aculock @acsfd @acsmem | 
|  | 1059 | @c     __linkin_atfork ok | 
|  | 1060 | @c      catomic_compare_and_exchange_bool_acq ok | 
|  | 1061 | @c     lll_unlock (__fork_lock) @aculock | 
|  | 1062 | @c   *_environ @mtsenv | 
|  | 1063 | @c   next_env_entry ok | 
|  | 1064 | @c   strcspn dup ok | 
|  | 1065 | @c   __libc_mallopt dup @mtasuconst:mallopt [setting mp_] | 
|  | 1066 | @c   __malloc_check_init @mtasuconst:malloc_hooks [setting hooks] | 
|  | 1067 | @c   *__malloc_initialize_hook unguarded, ok | 
|  | 1068 | @c  *__memalign_hook dup ok, unguarded | 
|  | 1069 | @c  arena_get dup @asulock @aculock @acsfd @acsmem | 
|  | 1070 | @c  _int_valloc @acsfd @acsmem | 
|  | 1071 | @c   malloc_consolidate dup ok | 
|  | 1072 | @c   _int_memalign dup @acsfd @acsmem | 
|  | 1073 | @c  arena_get_retry dup @asulock @aculock @acsfd @acsmem | 
|  | 1074 | @c  _int_memalign dup @acsfd @acsmem | 
|  | 1075 | @c  mutex_unlock dup @aculock | 
|  | 1076 | Using @code{valloc} is like using @code{memalign} and passing the page size | 
|  | 1077 | as the value of the second argument.  It is implemented like this: | 
|  | 1078 |  | 
|  | 1079 | @smallexample | 
|  | 1080 | void * | 
|  | 1081 | valloc (size_t size) | 
|  | 1082 | @{ | 
|  | 1083 | return memalign (getpagesize (), size); | 
|  | 1084 | @} | 
|  | 1085 | @end smallexample | 
|  | 1086 |  | 
|  | 1087 | @ref{Query Memory Parameters} for more information about the memory | 
|  | 1088 | subsystem. | 
|  | 1089 |  | 
|  | 1090 | The @code{valloc} function is obsolete and @code{aligned_alloc} or | 
|  | 1091 | @code{posix_memalign} should be used instead. | 
|  | 1092 | @end deftypefun | 
|  | 1093 |  | 
|  | 1094 | @node Malloc Tunable Parameters | 
|  | 1095 | @subsubsection Malloc Tunable Parameters | 
|  | 1096 |  | 
|  | 1097 | You can adjust some parameters for dynamic memory allocation with the | 
|  | 1098 | @code{mallopt} function.  This function is the general SVID/XPG | 
|  | 1099 | interface, defined in @file{malloc.h}. | 
|  | 1100 | @pindex malloc.h | 
|  | 1101 |  | 
|  | 1102 | @deftypefun int mallopt (int @var{param}, int @var{value}) | 
|  | 1103 | @safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}} | 
|  | 1104 | @c __libc_mallopt @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock | 
|  | 1105 | @c  ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem | 
|  | 1106 | @c  mutex_lock (main_arena->mutex) @asulock @aculock | 
|  | 1107 | @c  malloc_consolidate dup ok | 
|  | 1108 | @c  set_max_fast ok | 
|  | 1109 | @c  mutex_unlock dup @aculock | 
|  | 1110 |  | 
|  | 1111 | When calling @code{mallopt}, the @var{param} argument specifies the | 
|  | 1112 | parameter to be set, and @var{value} the new value to be set.  Possible | 
|  | 1113 | choices for @var{param}, as defined in @file{malloc.h}, are: | 
|  | 1114 |  | 
|  | 1115 | @table @code | 
|  | 1116 | @comment TODO: @item M_ARENA_MAX | 
|  | 1117 | @comment       - Document ARENA_MAX env var. | 
|  | 1118 | @comment TODO: @item M_ARENA_TEST | 
|  | 1119 | @comment       - Document ARENA_TEST env var. | 
|  | 1120 | @comment TODO: @item M_CHECK_ACTION | 
|  | 1121 | @item M_MMAP_MAX | 
|  | 1122 | The maximum number of chunks to allocate with @code{mmap}.  Setting this | 
|  | 1123 | to zero disables all use of @code{mmap}. | 
|  | 1124 | @item M_MMAP_THRESHOLD | 
|  | 1125 | All chunks larger than this value are allocated outside the normal | 
|  | 1126 | heap, using the @code{mmap} system call.  This way it is guaranteed | 
|  | 1127 | that the memory for these chunks can be returned to the system on | 
|  | 1128 | @code{free}.  Note that requests smaller than this threshold might still | 
|  | 1129 | be allocated via @code{mmap}. | 
|  | 1130 | @comment TODO: @item M_MXFAST | 
|  | 1131 | @item M_PERTURB | 
|  | 1132 | If non-zero, memory blocks are filled with values depending on some | 
|  | 1133 | low order bits of this parameter when they are allocated (except when | 
|  | 1134 | allocated by @code{calloc}) and freed.  This can be used to debug the | 
|  | 1135 | use of uninitialized or freed heap memory.  Note that this option does not | 
|  | 1136 | guarantee that the freed block will have any specific values.  It only | 
|  | 1137 | guarantees that the content the block had before it was freed will be | 
|  | 1138 | overwritten. | 
|  | 1139 | @item M_TOP_PAD | 
|  | 1140 | This parameter determines the amount of extra memory to obtain from the | 
|  | 1141 | system when a call to @code{sbrk} is required.  It also specifies the | 
|  | 1142 | number of bytes to retain when shrinking the heap by calling @code{sbrk} | 
|  | 1143 | with a negative argument.  This provides the necessary hysteresis in | 
|  | 1144 | heap size such that excessive amounts of system calls can be avoided. | 
|  | 1145 | @item M_TRIM_THRESHOLD | 
|  | 1146 | This is the minimum size (in bytes) of the top-most, releasable chunk | 
|  | 1147 | that will cause @code{sbrk} to be called with a negative argument in | 
|  | 1148 | order to return memory to the system. | 
|  | 1149 | @end table | 
|  | 1150 |  | 
|  | 1151 | @end deftypefun | 
|  | 1152 |  | 
|  | 1153 | @node Heap Consistency Checking | 
|  | 1154 | @subsubsection Heap Consistency Checking | 
|  | 1155 |  | 
|  | 1156 | @cindex heap consistency checking | 
|  | 1157 | @cindex consistency checking, of heap | 
|  | 1158 |  | 
|  | 1159 | You can ask @code{malloc} to check the consistency of dynamic memory by | 
|  | 1160 | using the @code{mcheck} function.  This function is a GNU extension, | 
|  | 1161 | declared in @file{mcheck.h}. | 
|  | 1162 | @pindex mcheck.h | 
|  | 1163 |  | 
|  | 1164 | @comment mcheck.h | 
|  | 1165 | @comment GNU | 
|  | 1166 | @deftypefun int mcheck (void (*@var{abortfn}) (enum mcheck_status @var{status})) | 
|  | 1167 | @safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} | 
|  | 1168 | @c The hooks must be set up before malloc is first used, which sort of | 
|  | 1169 | @c implies @mtuinit/@asuinit but since the function is a no-op if malloc | 
|  | 1170 | @c was already used, that doesn't pose any safety issues.  The actual | 
|  | 1171 | @c problem is with the hooks, designed for single-threaded | 
|  | 1172 | @c fully-synchronous operation: they manage an unguarded linked list of | 
|  | 1173 | @c allocated blocks, and get temporarily overwritten before calling the | 
|  | 1174 | @c allocation functions recursively while holding the old hooks.  There | 
|  | 1175 | @c are no guards for thread safety, and inconsistent hooks may be found | 
|  | 1176 | @c within signal handlers or left behind in case of cancellation. | 
|  | 1177 |  | 
|  | 1178 | Calling @code{mcheck} tells @code{malloc} to perform occasional | 
|  | 1179 | consistency checks.  These will catch things such as writing | 
|  | 1180 | past the end of a block that was allocated with @code{malloc}. | 
|  | 1181 |  | 
|  | 1182 | The @var{abortfn} argument is the function to call when an inconsistency | 
|  | 1183 | is found.  If you supply a null pointer, then @code{mcheck} uses a | 
|  | 1184 | default function which prints a message and calls @code{abort} | 
|  | 1185 | (@pxref{Aborting a Program}).  The function you supply is called with | 
|  | 1186 | one argument, which says what sort of inconsistency was detected; its | 
|  | 1187 | type is described below. | 
|  | 1188 |  | 
|  | 1189 | It is too late to begin allocation checking once you have allocated | 
|  | 1190 | anything with @code{malloc}.  So @code{mcheck} does nothing in that | 
|  | 1191 | case.  The function returns @code{-1} if you call it too late, and | 
|  | 1192 | @code{0} otherwise (when it is successful). | 
|  | 1193 |  | 
|  | 1194 | The easiest way to arrange to call @code{mcheck} early enough is to use | 
|  | 1195 | the option @samp{-lmcheck} when you link your program; then you don't | 
|  | 1196 | need to modify your program source at all.  Alternatively you might use | 
|  | 1197 | a debugger to insert a call to @code{mcheck} whenever the program is | 
|  | 1198 | started, for example these gdb commands will automatically call @code{mcheck} | 
|  | 1199 | whenever the program starts: | 
|  | 1200 |  | 
|  | 1201 | @smallexample | 
|  | 1202 | (gdb) break main | 
|  | 1203 | Breakpoint 1, main (argc=2, argv=0xbffff964) at whatever.c:10 | 
|  | 1204 | (gdb) command 1 | 
|  | 1205 | Type commands for when breakpoint 1 is hit, one per line. | 
|  | 1206 | End with a line saying just "end". | 
|  | 1207 | >call mcheck(0) | 
|  | 1208 | >continue | 
|  | 1209 | >end | 
|  | 1210 | (gdb) @dots{} | 
|  | 1211 | @end smallexample | 
|  | 1212 |  | 
|  | 1213 | This will however only work if no initialization function of any object | 
|  | 1214 | involved calls any of the @code{malloc} functions since @code{mcheck} | 
|  | 1215 | must be called before the first such function. | 
|  | 1216 |  | 
|  | 1217 | @end deftypefun | 
|  | 1218 |  | 
|  | 1219 | @deftypefun {enum mcheck_status} mprobe (void *@var{pointer}) | 
|  | 1220 | @safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} | 
|  | 1221 | @c The linked list of headers may be modified concurrently by other | 
|  | 1222 | @c threads, and it may find a partial update if called from a signal | 
|  | 1223 | @c handler.  It's mostly read only, so cancelling it might be safe, but | 
|  | 1224 | @c it will modify global state that, if cancellation hits at just the | 
|  | 1225 | @c right spot, may be left behind inconsistent.  This path is only taken | 
|  | 1226 | @c if checkhdr finds an inconsistency.  If the inconsistency could only | 
|  | 1227 | @c occur because of earlier undefined behavior, that wouldn't be an | 
|  | 1228 | @c additional safety issue problem, but because of the other concurrency | 
|  | 1229 | @c issues in the mcheck hooks, the apparent inconsistency could be the | 
|  | 1230 | @c result of mcheck's own internal data race.  So, AC-Unsafe it is. | 
|  | 1231 |  | 
|  | 1232 | The @code{mprobe} function lets you explicitly check for inconsistencies | 
|  | 1233 | in a particular allocated block.  You must have already called | 
|  | 1234 | @code{mcheck} at the beginning of the program, to do its occasional | 
|  | 1235 | checks; calling @code{mprobe} requests an additional consistency check | 
|  | 1236 | to be done at the time of the call. | 
|  | 1237 |  | 
|  | 1238 | The argument @var{pointer} must be a pointer returned by @code{malloc} | 
|  | 1239 | or @code{realloc}.  @code{mprobe} returns a value that says what | 
|  | 1240 | inconsistency, if any, was found.  The values are described below. | 
|  | 1241 | @end deftypefun | 
|  | 1242 |  | 
|  | 1243 | @deftp {Data Type} {enum mcheck_status} | 
|  | 1244 | This enumerated type describes what kind of inconsistency was detected | 
|  | 1245 | in an allocated block, if any.  Here are the possible values: | 
|  | 1246 |  | 
|  | 1247 | @table @code | 
|  | 1248 | @item MCHECK_DISABLED | 
|  | 1249 | @code{mcheck} was not called before the first allocation. | 
|  | 1250 | No consistency checking can be done. | 
|  | 1251 | @item MCHECK_OK | 
|  | 1252 | No inconsistency detected. | 
|  | 1253 | @item MCHECK_HEAD | 
|  | 1254 | The data immediately before the block was modified. | 
|  | 1255 | This commonly happens when an array index or pointer | 
|  | 1256 | is decremented too far. | 
|  | 1257 | @item MCHECK_TAIL | 
|  | 1258 | The data immediately after the block was modified. | 
|  | 1259 | This commonly happens when an array index or pointer | 
|  | 1260 | is incremented too far. | 
|  | 1261 | @item MCHECK_FREE | 
|  | 1262 | The block was already freed. | 
|  | 1263 | @end table | 
|  | 1264 | @end deftp | 
|  | 1265 |  | 
|  | 1266 | Another possibility to check for and guard against bugs in the use of | 
|  | 1267 | @code{malloc}, @code{realloc} and @code{free} is to set the environment | 
|  | 1268 | variable @code{MALLOC_CHECK_}.  When @code{MALLOC_CHECK_} is set, a | 
|  | 1269 | special (less efficient) implementation is used which is designed to be | 
|  | 1270 | tolerant against simple errors, such as double calls of @code{free} with | 
|  | 1271 | the same argument, or overruns of a single byte (off-by-one bugs).  Not | 
|  | 1272 | all such errors can be protected against, however, and memory leaks can | 
|  | 1273 | result.  If @code{MALLOC_CHECK_} is set to @code{0}, any detected heap | 
|  | 1274 | corruption is silently ignored; if set to @code{1}, a diagnostic is | 
|  | 1275 | printed on @code{stderr}; if set to @code{2}, @code{abort} is called | 
|  | 1276 | immediately.  This can be useful because otherwise a crash may happen | 
|  | 1277 | much later, and the true cause for the problem is then very hard to | 
|  | 1278 | track down. | 
|  | 1279 |  | 
|  | 1280 | There is one problem with @code{MALLOC_CHECK_}: in SUID or SGID binaries | 
|  | 1281 | it could possibly be exploited since diverging from the normal programs | 
|  | 1282 | behavior it now writes something to the standard error descriptor. | 
|  | 1283 | Therefore the use of @code{MALLOC_CHECK_} is disabled by default for | 
|  | 1284 | SUID and SGID binaries.  It can be enabled again by the system | 
|  | 1285 | administrator by adding a file @file{/etc/suid-debug} (the content is | 
|  | 1286 | not important it could be empty). | 
|  | 1287 |  | 
|  | 1288 | So, what's the difference between using @code{MALLOC_CHECK_} and linking | 
|  | 1289 | with @samp{-lmcheck}?  @code{MALLOC_CHECK_} is orthogonal with respect to | 
|  | 1290 | @samp{-lmcheck}.  @samp{-lmcheck} has been added for backward | 
|  | 1291 | compatibility.  Both @code{MALLOC_CHECK_} and @samp{-lmcheck} should | 
|  | 1292 | uncover the same bugs - but using @code{MALLOC_CHECK_} you don't need to | 
|  | 1293 | recompile your application. | 
|  | 1294 |  | 
|  | 1295 | @node Hooks for Malloc | 
|  | 1296 | @subsubsection Memory Allocation Hooks | 
|  | 1297 | @cindex allocation hooks, for @code{malloc} | 
|  | 1298 |  | 
|  | 1299 | @Theglibc{} lets you modify the behavior of @code{malloc}, | 
|  | 1300 | @code{realloc}, and @code{free} by specifying appropriate hook | 
|  | 1301 | functions.  You can use these hooks to help you debug programs that use | 
|  | 1302 | dynamic memory allocation, for example. | 
|  | 1303 |  | 
|  | 1304 | The hook variables are declared in @file{malloc.h}. | 
|  | 1305 | @pindex malloc.h | 
|  | 1306 |  | 
|  | 1307 | @comment malloc.h | 
|  | 1308 | @comment GNU | 
|  | 1309 | @defvar __malloc_hook | 
|  | 1310 | The value of this variable is a pointer to the function that | 
|  | 1311 | @code{malloc} uses whenever it is called.  You should define this | 
|  | 1312 | function to look like @code{malloc}; that is, like: | 
|  | 1313 |  | 
|  | 1314 | @smallexample | 
|  | 1315 | void *@var{function} (size_t @var{size}, const void *@var{caller}) | 
|  | 1316 | @end smallexample | 
|  | 1317 |  | 
|  | 1318 | The value of @var{caller} is the return address found on the stack when | 
|  | 1319 | the @code{malloc} function was called.  This value allows you to trace | 
|  | 1320 | the memory consumption of the program. | 
|  | 1321 | @end defvar | 
|  | 1322 |  | 
|  | 1323 | @comment malloc.h | 
|  | 1324 | @comment GNU | 
|  | 1325 | @defvar __realloc_hook | 
|  | 1326 | The value of this variable is a pointer to function that @code{realloc} | 
|  | 1327 | uses whenever it is called.  You should define this function to look | 
|  | 1328 | like @code{realloc}; that is, like: | 
|  | 1329 |  | 
|  | 1330 | @smallexample | 
|  | 1331 | void *@var{function} (void *@var{ptr}, size_t @var{size}, const void *@var{caller}) | 
|  | 1332 | @end smallexample | 
|  | 1333 |  | 
|  | 1334 | The value of @var{caller} is the return address found on the stack when | 
|  | 1335 | the @code{realloc} function was called.  This value allows you to trace the | 
|  | 1336 | memory consumption of the program. | 
|  | 1337 | @end defvar | 
|  | 1338 |  | 
|  | 1339 | @comment malloc.h | 
|  | 1340 | @comment GNU | 
|  | 1341 | @defvar __free_hook | 
|  | 1342 | The value of this variable is a pointer to function that @code{free} | 
|  | 1343 | uses whenever it is called.  You should define this function to look | 
|  | 1344 | like @code{free}; that is, like: | 
|  | 1345 |  | 
|  | 1346 | @smallexample | 
|  | 1347 | void @var{function} (void *@var{ptr}, const void *@var{caller}) | 
|  | 1348 | @end smallexample | 
|  | 1349 |  | 
|  | 1350 | The value of @var{caller} is the return address found on the stack when | 
|  | 1351 | the @code{free} function was called.  This value allows you to trace the | 
|  | 1352 | memory consumption of the program. | 
|  | 1353 | @end defvar | 
|  | 1354 |  | 
|  | 1355 | @comment malloc.h | 
|  | 1356 | @comment GNU | 
|  | 1357 | @defvar __memalign_hook | 
|  | 1358 | The value of this variable is a pointer to function that @code{aligned_alloc}, | 
|  | 1359 | @code{memalign}, @code{posix_memalign} and @code{valloc} use whenever they | 
|  | 1360 | are called.  You should define this function to look like @code{aligned_alloc}; | 
|  | 1361 | that is, like: | 
|  | 1362 |  | 
|  | 1363 | @smallexample | 
|  | 1364 | void *@var{function} (size_t @var{alignment}, size_t @var{size}, const void *@var{caller}) | 
|  | 1365 | @end smallexample | 
|  | 1366 |  | 
|  | 1367 | The value of @var{caller} is the return address found on the stack when | 
|  | 1368 | the @code{aligned_alloc}, @code{memalign}, @code{posix_memalign} or | 
|  | 1369 | @code{valloc} functions are called.  This value allows you to trace the | 
|  | 1370 | memory consumption of the program. | 
|  | 1371 | @end defvar | 
|  | 1372 |  | 
|  | 1373 | You must make sure that the function you install as a hook for one of | 
|  | 1374 | these functions does not call that function recursively without restoring | 
|  | 1375 | the old value of the hook first!  Otherwise, your program will get stuck | 
|  | 1376 | in an infinite recursion.  Before calling the function recursively, one | 
|  | 1377 | should make sure to restore all the hooks to their previous value.  When | 
|  | 1378 | coming back from the recursive call, all the hooks should be resaved | 
|  | 1379 | since a hook might modify itself. | 
|  | 1380 |  | 
|  | 1381 | @comment malloc.h | 
|  | 1382 | @comment GNU | 
|  | 1383 | @defvar __malloc_initialize_hook | 
|  | 1384 | The value of this variable is a pointer to a function that is called | 
|  | 1385 | once when the malloc implementation is initialized.  This is a weak | 
|  | 1386 | variable, so it can be overridden in the application with a definition | 
|  | 1387 | like the following: | 
|  | 1388 |  | 
|  | 1389 | @smallexample | 
|  | 1390 | void (*@var{__malloc_initialize_hook}) (void) = my_init_hook; | 
|  | 1391 | @end smallexample | 
|  | 1392 | @end defvar | 
|  | 1393 |  | 
|  | 1394 | An issue to look out for is the time at which the malloc hook functions | 
|  | 1395 | can be safely installed.  If the hook functions call the malloc-related | 
|  | 1396 | functions recursively, it is necessary that malloc has already properly | 
|  | 1397 | initialized itself at the time when @code{__malloc_hook} etc. is | 
|  | 1398 | assigned to.  On the other hand, if the hook functions provide a | 
|  | 1399 | complete malloc implementation of their own, it is vital that the hooks | 
|  | 1400 | are assigned to @emph{before} the very first @code{malloc} call has | 
|  | 1401 | completed, because otherwise a chunk obtained from the ordinary, | 
|  | 1402 | un-hooked malloc may later be handed to @code{__free_hook}, for example. | 
|  | 1403 |  | 
|  | 1404 | In both cases, the problem can be solved by setting up the hooks from | 
|  | 1405 | within a user-defined function pointed to by | 
|  | 1406 | @code{__malloc_initialize_hook}---then the hooks will be set up safely | 
|  | 1407 | at the right time. | 
|  | 1408 |  | 
|  | 1409 | Here is an example showing how to use @code{__malloc_hook} and | 
|  | 1410 | @code{__free_hook} properly.  It installs a function that prints out | 
|  | 1411 | information every time @code{malloc} or @code{free} is called.  We just | 
|  | 1412 | assume here that @code{realloc} and @code{memalign} are not used in our | 
|  | 1413 | program. | 
|  | 1414 |  | 
|  | 1415 | @smallexample | 
|  | 1416 | /* Prototypes for __malloc_hook, __free_hook */ | 
|  | 1417 | #include <malloc.h> | 
|  | 1418 |  | 
|  | 1419 | /* Prototypes for our hooks.  */ | 
|  | 1420 | static void my_init_hook (void); | 
|  | 1421 | static void *my_malloc_hook (size_t, const void *); | 
|  | 1422 | static void my_free_hook (void*, const void *); | 
|  | 1423 |  | 
|  | 1424 | /* Override initializing hook from the C library. */ | 
|  | 1425 | void (*__malloc_initialize_hook) (void) = my_init_hook; | 
|  | 1426 |  | 
|  | 1427 | static void | 
|  | 1428 | my_init_hook (void) | 
|  | 1429 | @{ | 
|  | 1430 | old_malloc_hook = __malloc_hook; | 
|  | 1431 | old_free_hook = __free_hook; | 
|  | 1432 | __malloc_hook = my_malloc_hook; | 
|  | 1433 | __free_hook = my_free_hook; | 
|  | 1434 | @} | 
|  | 1435 |  | 
|  | 1436 | static void * | 
|  | 1437 | my_malloc_hook (size_t size, const void *caller) | 
|  | 1438 | @{ | 
|  | 1439 | void *result; | 
|  | 1440 | /* Restore all old hooks */ | 
|  | 1441 | __malloc_hook = old_malloc_hook; | 
|  | 1442 | __free_hook = old_free_hook; | 
|  | 1443 | /* Call recursively */ | 
|  | 1444 | result = malloc (size); | 
|  | 1445 | /* Save underlying hooks */ | 
|  | 1446 | old_malloc_hook = __malloc_hook; | 
|  | 1447 | old_free_hook = __free_hook; | 
|  | 1448 | /* @r{@code{printf} might call @code{malloc}, so protect it too.} */ | 
|  | 1449 | printf ("malloc (%u) returns %p\n", (unsigned int) size, result); | 
|  | 1450 | /* Restore our own hooks */ | 
|  | 1451 | __malloc_hook = my_malloc_hook; | 
|  | 1452 | __free_hook = my_free_hook; | 
|  | 1453 | return result; | 
|  | 1454 | @} | 
|  | 1455 |  | 
|  | 1456 | static void | 
|  | 1457 | my_free_hook (void *ptr, const void *caller) | 
|  | 1458 | @{ | 
|  | 1459 | /* Restore all old hooks */ | 
|  | 1460 | __malloc_hook = old_malloc_hook; | 
|  | 1461 | __free_hook = old_free_hook; | 
|  | 1462 | /* Call recursively */ | 
|  | 1463 | free (ptr); | 
|  | 1464 | /* Save underlying hooks */ | 
|  | 1465 | old_malloc_hook = __malloc_hook; | 
|  | 1466 | old_free_hook = __free_hook; | 
|  | 1467 | /* @r{@code{printf} might call @code{free}, so protect it too.} */ | 
|  | 1468 | printf ("freed pointer %p\n", ptr); | 
|  | 1469 | /* Restore our own hooks */ | 
|  | 1470 | __malloc_hook = my_malloc_hook; | 
|  | 1471 | __free_hook = my_free_hook; | 
|  | 1472 | @} | 
|  | 1473 |  | 
|  | 1474 | main () | 
|  | 1475 | @{ | 
|  | 1476 | @dots{} | 
|  | 1477 | @} | 
|  | 1478 | @end smallexample | 
|  | 1479 |  | 
|  | 1480 | The @code{mcheck} function (@pxref{Heap Consistency Checking}) works by | 
|  | 1481 | installing such hooks. | 
|  | 1482 |  | 
|  | 1483 | @c __morecore, __after_morecore_hook are undocumented | 
|  | 1484 | @c It's not clear whether to document them. | 
|  | 1485 |  | 
|  | 1486 | @node Statistics of Malloc | 
|  | 1487 | @subsubsection Statistics for Memory Allocation with @code{malloc} | 
|  | 1488 |  | 
|  | 1489 | @cindex allocation statistics | 
|  | 1490 | You can get information about dynamic memory allocation by calling the | 
|  | 1491 | @code{mallinfo} function.  This function and its associated data type | 
|  | 1492 | are declared in @file{malloc.h}; they are an extension of the standard | 
|  | 1493 | SVID/XPG version. | 
|  | 1494 | @pindex malloc.h | 
|  | 1495 |  | 
|  | 1496 | @comment malloc.h | 
|  | 1497 | @comment GNU | 
|  | 1498 | @deftp {Data Type} {struct mallinfo} | 
|  | 1499 | This structure type is used to return information about the dynamic | 
|  | 1500 | memory allocator.  It contains the following members: | 
|  | 1501 |  | 
|  | 1502 | @table @code | 
|  | 1503 | @item int arena | 
|  | 1504 | This is the total size of memory allocated with @code{sbrk} by | 
|  | 1505 | @code{malloc}, in bytes. | 
|  | 1506 |  | 
|  | 1507 | @item int ordblks | 
|  | 1508 | This is the number of chunks not in use.  (The memory allocator | 
|  | 1509 | internally gets chunks of memory from the operating system, and then | 
|  | 1510 | carves them up to satisfy individual @code{malloc} requests; see | 
|  | 1511 | @ref{Efficiency and Malloc}.) | 
|  | 1512 |  | 
|  | 1513 | @item int smblks | 
|  | 1514 | This field is unused. | 
|  | 1515 |  | 
|  | 1516 | @item int hblks | 
|  | 1517 | This is the total number of chunks allocated with @code{mmap}. | 
|  | 1518 |  | 
|  | 1519 | @item int hblkhd | 
|  | 1520 | This is the total size of memory allocated with @code{mmap}, in bytes. | 
|  | 1521 |  | 
|  | 1522 | @item int usmblks | 
|  | 1523 | This field is unused. | 
|  | 1524 |  | 
|  | 1525 | @item int fsmblks | 
|  | 1526 | This field is unused. | 
|  | 1527 |  | 
|  | 1528 | @item int uordblks | 
|  | 1529 | This is the total size of memory occupied by chunks handed out by | 
|  | 1530 | @code{malloc}. | 
|  | 1531 |  | 
|  | 1532 | @item int fordblks | 
|  | 1533 | This is the total size of memory occupied by free (not in use) chunks. | 
|  | 1534 |  | 
|  | 1535 | @item int keepcost | 
|  | 1536 | This is the size of the top-most releasable chunk that normally | 
|  | 1537 | borders the end of the heap (i.e., the high end of the virtual address | 
|  | 1538 | space's data segment). | 
|  | 1539 |  | 
|  | 1540 | @end table | 
|  | 1541 | @end deftp | 
|  | 1542 |  | 
|  | 1543 | @comment malloc.h | 
|  | 1544 | @comment SVID | 
|  | 1545 | @deftypefun {struct mallinfo} mallinfo (void) | 
|  | 1546 | @safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}} | 
|  | 1547 | @c Accessing mp_.n_mmaps and mp_.max_mmapped_mem, modified with atomics | 
|  | 1548 | @c but non-atomically elsewhere, may get us inconsistent results.  We | 
|  | 1549 | @c mark the statistics as unsafe, rather than the fast-path functions | 
|  | 1550 | @c that collect the possibly inconsistent data. | 
|  | 1551 |  | 
|  | 1552 | @c __libc_mallinfo @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock | 
|  | 1553 | @c  ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem | 
|  | 1554 | @c  mutex_lock dup @asulock @aculock | 
|  | 1555 | @c  int_mallinfo @mtasuconst:mallopt [mp_ access on main_arena] | 
|  | 1556 | @c   malloc_consolidate dup ok | 
|  | 1557 | @c   check_malloc_state dup ok/disabled | 
|  | 1558 | @c   chunksize dup ok | 
|  | 1559 | @c   fastbin dupo ok | 
|  | 1560 | @c   bin_at dup ok | 
|  | 1561 | @c   last dup ok | 
|  | 1562 | @c  mutex_unlock @aculock | 
|  | 1563 |  | 
|  | 1564 | This function returns information about the current dynamic memory usage | 
|  | 1565 | in a structure of type @code{struct mallinfo}. | 
|  | 1566 | @end deftypefun | 
|  | 1567 |  | 
|  | 1568 | @node Summary of Malloc | 
|  | 1569 | @subsubsection Summary of @code{malloc}-Related Functions | 
|  | 1570 |  | 
|  | 1571 | Here is a summary of the functions that work with @code{malloc}: | 
|  | 1572 |  | 
|  | 1573 | @table @code | 
|  | 1574 | @item void *malloc (size_t @var{size}) | 
|  | 1575 | Allocate a block of @var{size} bytes.  @xref{Basic Allocation}. | 
|  | 1576 |  | 
|  | 1577 | @item void free (void *@var{addr}) | 
|  | 1578 | Free a block previously allocated by @code{malloc}.  @xref{Freeing after | 
|  | 1579 | Malloc}. | 
|  | 1580 |  | 
|  | 1581 | @item void *realloc (void *@var{addr}, size_t @var{size}) | 
|  | 1582 | Make a block previously allocated by @code{malloc} larger or smaller, | 
|  | 1583 | possibly by copying it to a new location.  @xref{Changing Block Size}. | 
|  | 1584 |  | 
|  | 1585 | @item void *calloc (size_t @var{count}, size_t @var{eltsize}) | 
|  | 1586 | Allocate a block of @var{count} * @var{eltsize} bytes using | 
|  | 1587 | @code{malloc}, and set its contents to zero.  @xref{Allocating Cleared | 
|  | 1588 | Space}. | 
|  | 1589 |  | 
|  | 1590 | @item void *valloc (size_t @var{size}) | 
|  | 1591 | Allocate a block of @var{size} bytes, starting on a page boundary. | 
|  | 1592 | @xref{Aligned Memory Blocks}. | 
|  | 1593 |  | 
|  | 1594 | @item void *aligned_alloc (size_t @var{size}, size_t @var{alignment}) | 
|  | 1595 | Allocate a block of @var{size} bytes, starting on an address that is a | 
|  | 1596 | multiple of @var{alignment}.  @xref{Aligned Memory Blocks}. | 
|  | 1597 |  | 
|  | 1598 | @item int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size}) | 
|  | 1599 | Allocate a block of @var{size} bytes, starting on an address that is a | 
|  | 1600 | multiple of @var{alignment}.  @xref{Aligned Memory Blocks}. | 
|  | 1601 |  | 
|  | 1602 | @item void *memalign (size_t @var{size}, size_t @var{boundary}) | 
|  | 1603 | Allocate a block of @var{size} bytes, starting on an address that is a | 
|  | 1604 | multiple of @var{boundary}.  @xref{Aligned Memory Blocks}. | 
|  | 1605 |  | 
|  | 1606 | @item int mallopt (int @var{param}, int @var{value}) | 
|  | 1607 | Adjust a tunable parameter.  @xref{Malloc Tunable Parameters}. | 
|  | 1608 |  | 
|  | 1609 | @item int mcheck (void (*@var{abortfn}) (void)) | 
|  | 1610 | Tell @code{malloc} to perform occasional consistency checks on | 
|  | 1611 | dynamically allocated memory, and to call @var{abortfn} when an | 
|  | 1612 | inconsistency is found.  @xref{Heap Consistency Checking}. | 
|  | 1613 |  | 
|  | 1614 | @item void *(*__malloc_hook) (size_t @var{size}, const void *@var{caller}) | 
|  | 1615 | A pointer to a function that @code{malloc} uses whenever it is called. | 
|  | 1616 |  | 
|  | 1617 | @item void *(*__realloc_hook) (void *@var{ptr}, size_t @var{size}, const void *@var{caller}) | 
|  | 1618 | A pointer to a function that @code{realloc} uses whenever it is called. | 
|  | 1619 |  | 
|  | 1620 | @item void (*__free_hook) (void *@var{ptr}, const void *@var{caller}) | 
|  | 1621 | A pointer to a function that @code{free} uses whenever it is called. | 
|  | 1622 |  | 
|  | 1623 | @item void (*__memalign_hook) (size_t @var{size}, size_t @var{alignment}, const void *@var{caller}) | 
|  | 1624 | A pointer to a function that @code{aligned_alloc}, @code{memalign}, | 
|  | 1625 | @code{posix_memalign} and @code{valloc} use whenever they are called. | 
|  | 1626 |  | 
|  | 1627 | @item struct mallinfo mallinfo (void) | 
|  | 1628 | Return information about the current dynamic memory usage. | 
|  | 1629 | @xref{Statistics of Malloc}. | 
|  | 1630 | @end table | 
|  | 1631 |  | 
|  | 1632 | @node Allocation Debugging | 
|  | 1633 | @subsection Allocation Debugging | 
|  | 1634 | @cindex allocation debugging | 
|  | 1635 | @cindex malloc debugger | 
|  | 1636 |  | 
|  | 1637 | A complicated task when programming with languages which do not use | 
|  | 1638 | garbage collected dynamic memory allocation is to find memory leaks. | 
|  | 1639 | Long running programs must assure that dynamically allocated objects are | 
|  | 1640 | freed at the end of their lifetime.  If this does not happen the system | 
|  | 1641 | runs out of memory, sooner or later. | 
|  | 1642 |  | 
|  | 1643 | The @code{malloc} implementation in @theglibc{} provides some | 
|  | 1644 | simple means to detect such leaks and obtain some information to find | 
|  | 1645 | the location.  To do this the application must be started in a special | 
|  | 1646 | mode which is enabled by an environment variable.  There are no speed | 
|  | 1647 | penalties for the program if the debugging mode is not enabled. | 
|  | 1648 |  | 
|  | 1649 | @menu | 
|  | 1650 | * Tracing malloc::               How to install the tracing functionality. | 
|  | 1651 | * Using the Memory Debugger::    Example programs excerpts. | 
|  | 1652 | * Tips for the Memory Debugger:: Some more or less clever ideas. | 
|  | 1653 | * Interpreting the traces::      What do all these lines mean? | 
|  | 1654 | @end menu | 
|  | 1655 |  | 
|  | 1656 | @node Tracing malloc | 
|  | 1657 | @subsubsection How to install the tracing functionality | 
|  | 1658 |  | 
|  | 1659 | @comment mcheck.h | 
|  | 1660 | @comment GNU | 
|  | 1661 | @deftypefun void mtrace (void) | 
|  | 1662 | @safety{@prelim{}@mtunsafe{@mtsenv{} @mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtuinit{}}@asunsafe{@asuinit{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} | 
|  | 1663 | @c Like the mcheck hooks, these are not designed with thread safety in | 
|  | 1664 | @c mind, because the hook pointers are temporarily modified without | 
|  | 1665 | @c regard to other threads, signals or cancellation. | 
|  | 1666 |  | 
|  | 1667 | @c mtrace @mtuinit @mtasurace:mtrace @mtsenv @asuinit @ascuheap @asucorrupt @acuinit @acucorrupt @aculock @acsfd @acsmem | 
|  | 1668 | @c  __libc_secure_getenv dup @mtsenv | 
|  | 1669 | @c  malloc dup @ascuheap @acsmem | 
|  | 1670 | @c  fopen dup @ascuheap @asulock @aculock @acsmem @acsfd | 
|  | 1671 | @c  fcntl dup ok | 
|  | 1672 | @c  setvbuf dup @aculock | 
|  | 1673 | @c  fprintf dup (on newly-created stream) @aculock | 
|  | 1674 | @c  __cxa_atexit (once) dup @asulock @aculock @acsmem | 
|  | 1675 | @c  free dup @ascuheap @acsmem | 
|  | 1676 | When the @code{mtrace} function is called it looks for an environment | 
|  | 1677 | variable named @code{MALLOC_TRACE}.  This variable is supposed to | 
|  | 1678 | contain a valid file name.  The user must have write access.  If the | 
|  | 1679 | file already exists it is truncated.  If the environment variable is not | 
|  | 1680 | set or it does not name a valid file which can be opened for writing | 
|  | 1681 | nothing is done.  The behavior of @code{malloc} etc. is not changed. | 
|  | 1682 | For obvious reasons this also happens if the application is installed | 
|  | 1683 | with the SUID or SGID bit set. | 
|  | 1684 |  | 
|  | 1685 | If the named file is successfully opened, @code{mtrace} installs special | 
|  | 1686 | handlers for the functions @code{malloc}, @code{realloc}, and | 
|  | 1687 | @code{free} (@pxref{Hooks for Malloc}).  From then on, all uses of these | 
|  | 1688 | functions are traced and protocolled into the file.  There is now of | 
|  | 1689 | course a speed penalty for all calls to the traced functions so tracing | 
|  | 1690 | should not be enabled during normal use. | 
|  | 1691 |  | 
|  | 1692 | This function is a GNU extension and generally not available on other | 
|  | 1693 | systems.  The prototype can be found in @file{mcheck.h}. | 
|  | 1694 | @end deftypefun | 
|  | 1695 |  | 
|  | 1696 | @comment mcheck.h | 
|  | 1697 | @comment GNU | 
|  | 1698 | @deftypefun void muntrace (void) | 
|  | 1699 | @safety{@prelim{}@mtunsafe{@mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{} @aculock{} @acsfd{}}} | 
|  | 1700 |  | 
|  | 1701 | @c muntrace @mtasurace:mtrace @mtslocale @asucorrupt @ascuheap @acucorrupt @acsmem @aculock @acsfd | 
|  | 1702 | @c  fprintf (fputs) dup @mtslocale @asucorrupt @ascuheap @acsmem @aculock @acucorrupt | 
|  | 1703 | @c  fclose dup @ascuheap @asulock @aculock @acsmem @acsfd | 
|  | 1704 | The @code{muntrace} function can be called after @code{mtrace} was used | 
|  | 1705 | to enable tracing the @code{malloc} calls.  If no (successful) call of | 
|  | 1706 | @code{mtrace} was made @code{muntrace} does nothing. | 
|  | 1707 |  | 
|  | 1708 | Otherwise it deinstalls the handlers for @code{malloc}, @code{realloc}, | 
|  | 1709 | and @code{free} and then closes the protocol file.  No calls are | 
|  | 1710 | protocolled anymore and the program runs again at full speed. | 
|  | 1711 |  | 
|  | 1712 | This function is a GNU extension and generally not available on other | 
|  | 1713 | systems.  The prototype can be found in @file{mcheck.h}. | 
|  | 1714 | @end deftypefun | 
|  | 1715 |  | 
|  | 1716 | @node Using the Memory Debugger | 
|  | 1717 | @subsubsection Example program excerpts | 
|  | 1718 |  | 
|  | 1719 | Even though the tracing functionality does not influence the runtime | 
|  | 1720 | behavior of the program it is not a good idea to call @code{mtrace} in | 
|  | 1721 | all programs.  Just imagine that you debug a program using @code{mtrace} | 
|  | 1722 | and all other programs used in the debugging session also trace their | 
|  | 1723 | @code{malloc} calls.  The output file would be the same for all programs | 
|  | 1724 | and thus is unusable.  Therefore one should call @code{mtrace} only if | 
|  | 1725 | compiled for debugging.  A program could therefore start like this: | 
|  | 1726 |  | 
|  | 1727 | @example | 
|  | 1728 | #include <mcheck.h> | 
|  | 1729 |  | 
|  | 1730 | int | 
|  | 1731 | main (int argc, char *argv[]) | 
|  | 1732 | @{ | 
|  | 1733 | #ifdef DEBUGGING | 
|  | 1734 | mtrace (); | 
|  | 1735 | #endif | 
|  | 1736 | @dots{} | 
|  | 1737 | @} | 
|  | 1738 | @end example | 
|  | 1739 |  | 
|  | 1740 | This is all what is needed if you want to trace the calls during the | 
|  | 1741 | whole runtime of the program.  Alternatively you can stop the tracing at | 
|  | 1742 | any time with a call to @code{muntrace}.  It is even possible to restart | 
|  | 1743 | the tracing again with a new call to @code{mtrace}.  But this can cause | 
|  | 1744 | unreliable results since there may be calls of the functions which are | 
|  | 1745 | not called.  Please note that not only the application uses the traced | 
|  | 1746 | functions, also libraries (including the C library itself) use these | 
|  | 1747 | functions. | 
|  | 1748 |  | 
|  | 1749 | This last point is also why it is no good idea to call @code{muntrace} | 
|  | 1750 | before the program terminated.  The libraries are informed about the | 
|  | 1751 | termination of the program only after the program returns from | 
|  | 1752 | @code{main} or calls @code{exit} and so cannot free the memory they use | 
|  | 1753 | before this time. | 
|  | 1754 |  | 
|  | 1755 | So the best thing one can do is to call @code{mtrace} as the very first | 
|  | 1756 | function in the program and never call @code{muntrace}.  So the program | 
|  | 1757 | traces almost all uses of the @code{malloc} functions (except those | 
|  | 1758 | calls which are executed by constructors of the program or used | 
|  | 1759 | libraries). | 
|  | 1760 |  | 
|  | 1761 | @node Tips for the Memory Debugger | 
|  | 1762 | @subsubsection Some more or less clever ideas | 
|  | 1763 |  | 
|  | 1764 | You know the situation.  The program is prepared for debugging and in | 
|  | 1765 | all debugging sessions it runs well.  But once it is started without | 
|  | 1766 | debugging the error shows up.  A typical example is a memory leak that | 
|  | 1767 | becomes visible only when we turn off the debugging.  If you foresee | 
|  | 1768 | such situations you can still win.  Simply use something equivalent to | 
|  | 1769 | the following little program: | 
|  | 1770 |  | 
|  | 1771 | @example | 
|  | 1772 | #include <mcheck.h> | 
|  | 1773 | #include <signal.h> | 
|  | 1774 |  | 
|  | 1775 | static void | 
|  | 1776 | enable (int sig) | 
|  | 1777 | @{ | 
|  | 1778 | mtrace (); | 
|  | 1779 | signal (SIGUSR1, enable); | 
|  | 1780 | @} | 
|  | 1781 |  | 
|  | 1782 | static void | 
|  | 1783 | disable (int sig) | 
|  | 1784 | @{ | 
|  | 1785 | muntrace (); | 
|  | 1786 | signal (SIGUSR2, disable); | 
|  | 1787 | @} | 
|  | 1788 |  | 
|  | 1789 | int | 
|  | 1790 | main (int argc, char *argv[]) | 
|  | 1791 | @{ | 
|  | 1792 | @dots{} | 
|  | 1793 |  | 
|  | 1794 | signal (SIGUSR1, enable); | 
|  | 1795 | signal (SIGUSR2, disable); | 
|  | 1796 |  | 
|  | 1797 | @dots{} | 
|  | 1798 | @} | 
|  | 1799 | @end example | 
|  | 1800 |  | 
|  | 1801 | I.e., the user can start the memory debugger any time s/he wants if the | 
|  | 1802 | program was started with @code{MALLOC_TRACE} set in the environment. | 
|  | 1803 | The output will of course not show the allocations which happened before | 
|  | 1804 | the first signal but if there is a memory leak this will show up | 
|  | 1805 | nevertheless. | 
|  | 1806 |  | 
|  | 1807 | @node Interpreting the traces | 
|  | 1808 | @subsubsection Interpreting the traces | 
|  | 1809 |  | 
|  | 1810 | If you take a look at the output it will look similar to this: | 
|  | 1811 |  | 
|  | 1812 | @example | 
|  | 1813 | = Start | 
|  | 1814 | @ [0x8048209] - 0x8064cc8 | 
|  | 1815 | @ [0x8048209] - 0x8064ce0 | 
|  | 1816 | @ [0x8048209] - 0x8064cf8 | 
|  | 1817 | @ [0x80481eb] + 0x8064c48 0x14 | 
|  | 1818 | @ [0x80481eb] + 0x8064c60 0x14 | 
|  | 1819 | @ [0x80481eb] + 0x8064c78 0x14 | 
|  | 1820 | @ [0x80481eb] + 0x8064c90 0x14 | 
|  | 1821 | = End | 
|  | 1822 | @end example | 
|  | 1823 |  | 
|  | 1824 | What this all means is not really important since the trace file is not | 
|  | 1825 | meant to be read by a human.  Therefore no attention is given to | 
|  | 1826 | readability.  Instead there is a program which comes with @theglibc{} | 
|  | 1827 | which interprets the traces and outputs a summary in an | 
|  | 1828 | user-friendly way.  The program is called @code{mtrace} (it is in fact a | 
|  | 1829 | Perl script) and it takes one or two arguments.  In any case the name of | 
|  | 1830 | the file with the trace output must be specified.  If an optional | 
|  | 1831 | argument precedes the name of the trace file this must be the name of | 
|  | 1832 | the program which generated the trace. | 
|  | 1833 |  | 
|  | 1834 | @example | 
|  | 1835 | drepper$ mtrace tst-mtrace log | 
|  | 1836 | No memory leaks. | 
|  | 1837 | @end example | 
|  | 1838 |  | 
|  | 1839 | In this case the program @code{tst-mtrace} was run and it produced a | 
|  | 1840 | trace file @file{log}.  The message printed by @code{mtrace} shows there | 
|  | 1841 | are no problems with the code, all allocated memory was freed | 
|  | 1842 | afterwards. | 
|  | 1843 |  | 
|  | 1844 | If we call @code{mtrace} on the example trace given above we would get a | 
|  | 1845 | different outout: | 
|  | 1846 |  | 
|  | 1847 | @example | 
|  | 1848 | drepper$ mtrace errlog | 
|  | 1849 | - 0x08064cc8 Free 2 was never alloc'd 0x8048209 | 
|  | 1850 | - 0x08064ce0 Free 3 was never alloc'd 0x8048209 | 
|  | 1851 | - 0x08064cf8 Free 4 was never alloc'd 0x8048209 | 
|  | 1852 |  | 
|  | 1853 | Memory not freed: | 
|  | 1854 | ----------------- | 
|  | 1855 | Address     Size     Caller | 
|  | 1856 | 0x08064c48     0x14  at 0x80481eb | 
|  | 1857 | 0x08064c60     0x14  at 0x80481eb | 
|  | 1858 | 0x08064c78     0x14  at 0x80481eb | 
|  | 1859 | 0x08064c90     0x14  at 0x80481eb | 
|  | 1860 | @end example | 
|  | 1861 |  | 
|  | 1862 | We have called @code{mtrace} with only one argument and so the script | 
|  | 1863 | has no chance to find out what is meant with the addresses given in the | 
|  | 1864 | trace.  We can do better: | 
|  | 1865 |  | 
|  | 1866 | @example | 
|  | 1867 | drepper$ mtrace tst errlog | 
|  | 1868 | - 0x08064cc8 Free 2 was never alloc'd /home/drepper/tst.c:39 | 
|  | 1869 | - 0x08064ce0 Free 3 was never alloc'd /home/drepper/tst.c:39 | 
|  | 1870 | - 0x08064cf8 Free 4 was never alloc'd /home/drepper/tst.c:39 | 
|  | 1871 |  | 
|  | 1872 | Memory not freed: | 
|  | 1873 | ----------------- | 
|  | 1874 | Address     Size     Caller | 
|  | 1875 | 0x08064c48     0x14  at /home/drepper/tst.c:33 | 
|  | 1876 | 0x08064c60     0x14  at /home/drepper/tst.c:33 | 
|  | 1877 | 0x08064c78     0x14  at /home/drepper/tst.c:33 | 
|  | 1878 | 0x08064c90     0x14  at /home/drepper/tst.c:33 | 
|  | 1879 | @end example | 
|  | 1880 |  | 
|  | 1881 | Suddenly the output makes much more sense and the user can see | 
|  | 1882 | immediately where the function calls causing the trouble can be found. | 
|  | 1883 |  | 
|  | 1884 | Interpreting this output is not complicated.  There are at most two | 
|  | 1885 | different situations being detected.  First, @code{free} was called for | 
|  | 1886 | pointers which were never returned by one of the allocation functions. | 
|  | 1887 | This is usually a very bad problem and what this looks like is shown in | 
|  | 1888 | the first three lines of the output.  Situations like this are quite | 
|  | 1889 | rare and if they appear they show up very drastically: the program | 
|  | 1890 | normally crashes. | 
|  | 1891 |  | 
|  | 1892 | The other situation which is much harder to detect are memory leaks.  As | 
|  | 1893 | you can see in the output the @code{mtrace} function collects all this | 
|  | 1894 | information and so can say that the program calls an allocation function | 
|  | 1895 | from line 33 in the source file @file{/home/drepper/tst-mtrace.c} four | 
|  | 1896 | times without freeing this memory before the program terminates. | 
|  | 1897 | Whether this is a real problem remains to be investigated. | 
|  | 1898 |  | 
|  | 1899 | @node Obstacks | 
|  | 1900 | @subsection Obstacks | 
|  | 1901 | @cindex obstacks | 
|  | 1902 |  | 
|  | 1903 | An @dfn{obstack} is a pool of memory containing a stack of objects.  You | 
|  | 1904 | can create any number of separate obstacks, and then allocate objects in | 
|  | 1905 | specified obstacks.  Within each obstack, the last object allocated must | 
|  | 1906 | always be the first one freed, but distinct obstacks are independent of | 
|  | 1907 | each other. | 
|  | 1908 |  | 
|  | 1909 | Aside from this one constraint of order of freeing, obstacks are totally | 
|  | 1910 | general: an obstack can contain any number of objects of any size.  They | 
|  | 1911 | are implemented with macros, so allocation is usually very fast as long as | 
|  | 1912 | the objects are usually small.  And the only space overhead per object is | 
|  | 1913 | the padding needed to start each object on a suitable boundary. | 
|  | 1914 |  | 
|  | 1915 | @menu | 
|  | 1916 | * Creating Obstacks::		How to declare an obstack in your program. | 
|  | 1917 | * Preparing for Obstacks::	Preparations needed before you can | 
|  | 1918 | use obstacks. | 
|  | 1919 | * Allocation in an Obstack::    Allocating objects in an obstack. | 
|  | 1920 | * Freeing Obstack Objects::     Freeing objects in an obstack. | 
|  | 1921 | * Obstack Functions::		The obstack functions are both | 
|  | 1922 | functions and macros. | 
|  | 1923 | * Growing Objects::             Making an object bigger by stages. | 
|  | 1924 | * Extra Fast Growing::		Extra-high-efficiency (though more | 
|  | 1925 | complicated) growing objects. | 
|  | 1926 | * Status of an Obstack::        Inquiries about the status of an obstack. | 
|  | 1927 | * Obstacks Data Alignment::     Controlling alignment of objects in obstacks. | 
|  | 1928 | * Obstack Chunks::              How obstacks obtain and release chunks; | 
|  | 1929 | efficiency considerations. | 
|  | 1930 | * Summary of Obstacks:: | 
|  | 1931 | @end menu | 
|  | 1932 |  | 
|  | 1933 | @node Creating Obstacks | 
|  | 1934 | @subsubsection Creating Obstacks | 
|  | 1935 |  | 
|  | 1936 | The utilities for manipulating obstacks are declared in the header | 
|  | 1937 | file @file{obstack.h}. | 
|  | 1938 | @pindex obstack.h | 
|  | 1939 |  | 
|  | 1940 | @comment obstack.h | 
|  | 1941 | @comment GNU | 
|  | 1942 | @deftp {Data Type} {struct obstack} | 
|  | 1943 | An obstack is represented by a data structure of type @code{struct | 
|  | 1944 | obstack}.  This structure has a small fixed size; it records the status | 
|  | 1945 | of the obstack and how to find the space in which objects are allocated. | 
|  | 1946 | It does not contain any of the objects themselves.  You should not try | 
|  | 1947 | to access the contents of the structure directly; use only the functions | 
|  | 1948 | described in this chapter. | 
|  | 1949 | @end deftp | 
|  | 1950 |  | 
|  | 1951 | You can declare variables of type @code{struct obstack} and use them as | 
|  | 1952 | obstacks, or you can allocate obstacks dynamically like any other kind | 
|  | 1953 | of object.  Dynamic allocation of obstacks allows your program to have a | 
|  | 1954 | variable number of different stacks.  (You can even allocate an | 
|  | 1955 | obstack structure in another obstack, but this is rarely useful.) | 
|  | 1956 |  | 
|  | 1957 | All the functions that work with obstacks require you to specify which | 
|  | 1958 | obstack to use.  You do this with a pointer of type @code{struct obstack | 
|  | 1959 | *}.  In the following, we often say ``an obstack'' when strictly | 
|  | 1960 | speaking the object at hand is such a pointer. | 
|  | 1961 |  | 
|  | 1962 | The objects in the obstack are packed into large blocks called | 
|  | 1963 | @dfn{chunks}.  The @code{struct obstack} structure points to a chain of | 
|  | 1964 | the chunks currently in use. | 
|  | 1965 |  | 
|  | 1966 | The obstack library obtains a new chunk whenever you allocate an object | 
|  | 1967 | that won't fit in the previous chunk.  Since the obstack library manages | 
|  | 1968 | chunks automatically, you don't need to pay much attention to them, but | 
|  | 1969 | you do need to supply a function which the obstack library should use to | 
|  | 1970 | get a chunk.  Usually you supply a function which uses @code{malloc} | 
|  | 1971 | directly or indirectly.  You must also supply a function to free a chunk. | 
|  | 1972 | These matters are described in the following section. | 
|  | 1973 |  | 
|  | 1974 | @node Preparing for Obstacks | 
|  | 1975 | @subsubsection Preparing for Using Obstacks | 
|  | 1976 |  | 
|  | 1977 | Each source file in which you plan to use the obstack functions | 
|  | 1978 | must include the header file @file{obstack.h}, like this: | 
|  | 1979 |  | 
|  | 1980 | @smallexample | 
|  | 1981 | #include <obstack.h> | 
|  | 1982 | @end smallexample | 
|  | 1983 |  | 
|  | 1984 | @findex obstack_chunk_alloc | 
|  | 1985 | @findex obstack_chunk_free | 
|  | 1986 | Also, if the source file uses the macro @code{obstack_init}, it must | 
|  | 1987 | declare or define two functions or macros that will be called by the | 
|  | 1988 | obstack library.  One, @code{obstack_chunk_alloc}, is used to allocate | 
|  | 1989 | the chunks of memory into which objects are packed.  The other, | 
|  | 1990 | @code{obstack_chunk_free}, is used to return chunks when the objects in | 
|  | 1991 | them are freed.  These macros should appear before any use of obstacks | 
|  | 1992 | in the source file. | 
|  | 1993 |  | 
|  | 1994 | Usually these are defined to use @code{malloc} via the intermediary | 
|  | 1995 | @code{xmalloc} (@pxref{Unconstrained Allocation}).  This is done with | 
|  | 1996 | the following pair of macro definitions: | 
|  | 1997 |  | 
|  | 1998 | @smallexample | 
|  | 1999 | #define obstack_chunk_alloc xmalloc | 
|  | 2000 | #define obstack_chunk_free free | 
|  | 2001 | @end smallexample | 
|  | 2002 |  | 
|  | 2003 | @noindent | 
|  | 2004 | Though the memory you get using obstacks really comes from @code{malloc}, | 
|  | 2005 | using obstacks is faster because @code{malloc} is called less often, for | 
|  | 2006 | larger blocks of memory.  @xref{Obstack Chunks}, for full details. | 
|  | 2007 |  | 
|  | 2008 | At run time, before the program can use a @code{struct obstack} object | 
|  | 2009 | as an obstack, it must initialize the obstack by calling | 
|  | 2010 | @code{obstack_init}. | 
|  | 2011 |  | 
|  | 2012 | @comment obstack.h | 
|  | 2013 | @comment GNU | 
|  | 2014 | @deftypefun int obstack_init (struct obstack *@var{obstack-ptr}) | 
|  | 2015 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{@acsmem{}}} | 
|  | 2016 | @c obstack_init @mtsrace:obstack-ptr @acsmem | 
|  | 2017 | @c  _obstack_begin @acsmem | 
|  | 2018 | @c    chunkfun = obstack_chunk_alloc (suggested malloc) | 
|  | 2019 | @c    freefun = obstack_chunk_free (suggested free) | 
|  | 2020 | @c   *chunkfun @acsmem | 
|  | 2021 | @c    obstack_chunk_alloc user-supplied | 
|  | 2022 | @c   *obstack_alloc_failed_handler user-supplied | 
|  | 2023 | @c    -> print_and_abort (default) | 
|  | 2024 | @c | 
|  | 2025 | @c print_and_abort | 
|  | 2026 | @c  _ dup @ascuintl | 
|  | 2027 | @c  fxprintf dup @asucorrupt @aculock @acucorrupt | 
|  | 2028 | @c  exit @acucorrupt? | 
|  | 2029 | Initialize obstack @var{obstack-ptr} for allocation of objects.  This | 
|  | 2030 | function calls the obstack's @code{obstack_chunk_alloc} function.  If | 
|  | 2031 | allocation of memory fails, the function pointed to by | 
|  | 2032 | @code{obstack_alloc_failed_handler} is called.  The @code{obstack_init} | 
|  | 2033 | function always returns 1 (Compatibility notice: Former versions of | 
|  | 2034 | obstack returned 0 if allocation failed). | 
|  | 2035 | @end deftypefun | 
|  | 2036 |  | 
|  | 2037 | Here are two examples of how to allocate the space for an obstack and | 
|  | 2038 | initialize it.  First, an obstack that is a static variable: | 
|  | 2039 |  | 
|  | 2040 | @smallexample | 
|  | 2041 | static struct obstack myobstack; | 
|  | 2042 | @dots{} | 
|  | 2043 | obstack_init (&myobstack); | 
|  | 2044 | @end smallexample | 
|  | 2045 |  | 
|  | 2046 | @noindent | 
|  | 2047 | Second, an obstack that is itself dynamically allocated: | 
|  | 2048 |  | 
|  | 2049 | @smallexample | 
|  | 2050 | struct obstack *myobstack_ptr | 
|  | 2051 | = (struct obstack *) xmalloc (sizeof (struct obstack)); | 
|  | 2052 |  | 
|  | 2053 | obstack_init (myobstack_ptr); | 
|  | 2054 | @end smallexample | 
|  | 2055 |  | 
|  | 2056 | @comment obstack.h | 
|  | 2057 | @comment GNU | 
|  | 2058 | @defvar obstack_alloc_failed_handler | 
|  | 2059 | The value of this variable is a pointer to a function that | 
|  | 2060 | @code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate | 
|  | 2061 | memory.  The default action is to print a message and abort. | 
|  | 2062 | You should supply a function that either calls @code{exit} | 
|  | 2063 | (@pxref{Program Termination}) or @code{longjmp} (@pxref{Non-Local | 
|  | 2064 | Exits}) and doesn't return. | 
|  | 2065 |  | 
|  | 2066 | @smallexample | 
|  | 2067 | void my_obstack_alloc_failed (void) | 
|  | 2068 | @dots{} | 
|  | 2069 | obstack_alloc_failed_handler = &my_obstack_alloc_failed; | 
|  | 2070 | @end smallexample | 
|  | 2071 |  | 
|  | 2072 | @end defvar | 
|  | 2073 |  | 
|  | 2074 | @node Allocation in an Obstack | 
|  | 2075 | @subsubsection Allocation in an Obstack | 
|  | 2076 | @cindex allocation (obstacks) | 
|  | 2077 |  | 
|  | 2078 | The most direct way to allocate an object in an obstack is with | 
|  | 2079 | @code{obstack_alloc}, which is invoked almost like @code{malloc}. | 
|  | 2080 |  | 
|  | 2081 | @comment obstack.h | 
|  | 2082 | @comment GNU | 
|  | 2083 | @deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) | 
|  | 2084 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2085 | @c obstack_alloc @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2086 | @c  obstack_blank dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2087 | @c  obstack_finish dup @mtsrace:obstack-ptr @acucorrupt | 
|  | 2088 | This allocates an uninitialized block of @var{size} bytes in an obstack | 
|  | 2089 | and returns its address.  Here @var{obstack-ptr} specifies which obstack | 
|  | 2090 | to allocate the block in; it is the address of the @code{struct obstack} | 
|  | 2091 | object which represents the obstack.  Each obstack function or macro | 
|  | 2092 | requires you to specify an @var{obstack-ptr} as the first argument. | 
|  | 2093 |  | 
|  | 2094 | This function calls the obstack's @code{obstack_chunk_alloc} function if | 
|  | 2095 | it needs to allocate a new chunk of memory; it calls | 
|  | 2096 | @code{obstack_alloc_failed_handler} if allocation of memory by | 
|  | 2097 | @code{obstack_chunk_alloc} failed. | 
|  | 2098 | @end deftypefun | 
|  | 2099 |  | 
|  | 2100 | For example, here is a function that allocates a copy of a string @var{str} | 
|  | 2101 | in a specific obstack, which is in the variable @code{string_obstack}: | 
|  | 2102 |  | 
|  | 2103 | @smallexample | 
|  | 2104 | struct obstack string_obstack; | 
|  | 2105 |  | 
|  | 2106 | char * | 
|  | 2107 | copystring (char *string) | 
|  | 2108 | @{ | 
|  | 2109 | size_t len = strlen (string) + 1; | 
|  | 2110 | char *s = (char *) obstack_alloc (&string_obstack, len); | 
|  | 2111 | memcpy (s, string, len); | 
|  | 2112 | return s; | 
|  | 2113 | @} | 
|  | 2114 | @end smallexample | 
|  | 2115 |  | 
|  | 2116 | To allocate a block with specified contents, use the function | 
|  | 2117 | @code{obstack_copy}, declared like this: | 
|  | 2118 |  | 
|  | 2119 | @comment obstack.h | 
|  | 2120 | @comment GNU | 
|  | 2121 | @deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) | 
|  | 2122 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2123 | @c obstack_copy @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2124 | @c  obstack_grow dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2125 | @c  obstack_finish dup @mtsrace:obstack-ptr @acucorrupt | 
|  | 2126 | This allocates a block and initializes it by copying @var{size} | 
|  | 2127 | bytes of data starting at @var{address}.  It calls | 
|  | 2128 | @code{obstack_alloc_failed_handler} if allocation of memory by | 
|  | 2129 | @code{obstack_chunk_alloc} failed. | 
|  | 2130 | @end deftypefun | 
|  | 2131 |  | 
|  | 2132 | @comment obstack.h | 
|  | 2133 | @comment GNU | 
|  | 2134 | @deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) | 
|  | 2135 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2136 | @c obstack_copy0 @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2137 | @c  obstack_grow0 dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2138 | @c  obstack_finish dup @mtsrace:obstack-ptr @acucorrupt | 
|  | 2139 | Like @code{obstack_copy}, but appends an extra byte containing a null | 
|  | 2140 | character.  This extra byte is not counted in the argument @var{size}. | 
|  | 2141 | @end deftypefun | 
|  | 2142 |  | 
|  | 2143 | The @code{obstack_copy0} function is convenient for copying a sequence | 
|  | 2144 | of characters into an obstack as a null-terminated string.  Here is an | 
|  | 2145 | example of its use: | 
|  | 2146 |  | 
|  | 2147 | @smallexample | 
|  | 2148 | char * | 
|  | 2149 | obstack_savestring (char *addr, int size) | 
|  | 2150 | @{ | 
|  | 2151 | return obstack_copy0 (&myobstack, addr, size); | 
|  | 2152 | @} | 
|  | 2153 | @end smallexample | 
|  | 2154 |  | 
|  | 2155 | @noindent | 
|  | 2156 | Contrast this with the previous example of @code{savestring} using | 
|  | 2157 | @code{malloc} (@pxref{Basic Allocation}). | 
|  | 2158 |  | 
|  | 2159 | @node Freeing Obstack Objects | 
|  | 2160 | @subsubsection Freeing Objects in an Obstack | 
|  | 2161 | @cindex freeing (obstacks) | 
|  | 2162 |  | 
|  | 2163 | To free an object allocated in an obstack, use the function | 
|  | 2164 | @code{obstack_free}.  Since the obstack is a stack of objects, freeing | 
|  | 2165 | one object automatically frees all other objects allocated more recently | 
|  | 2166 | in the same obstack. | 
|  | 2167 |  | 
|  | 2168 | @comment obstack.h | 
|  | 2169 | @comment GNU | 
|  | 2170 | @deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) | 
|  | 2171 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}} | 
|  | 2172 | @c obstack_free @mtsrace:obstack-ptr @acucorrupt | 
|  | 2173 | @c  (obstack_free) @mtsrace:obstack-ptr @acucorrupt | 
|  | 2174 | @c   *freefun dup user-supplied | 
|  | 2175 | If @var{object} is a null pointer, everything allocated in the obstack | 
|  | 2176 | is freed.  Otherwise, @var{object} must be the address of an object | 
|  | 2177 | allocated in the obstack.  Then @var{object} is freed, along with | 
|  | 2178 | everything allocated in @var{obstack} since @var{object}. | 
|  | 2179 | @end deftypefun | 
|  | 2180 |  | 
|  | 2181 | Note that if @var{object} is a null pointer, the result is an | 
|  | 2182 | uninitialized obstack.  To free all memory in an obstack but leave it | 
|  | 2183 | valid for further allocation, call @code{obstack_free} with the address | 
|  | 2184 | of the first object allocated on the obstack: | 
|  | 2185 |  | 
|  | 2186 | @smallexample | 
|  | 2187 | obstack_free (obstack_ptr, first_object_allocated_ptr); | 
|  | 2188 | @end smallexample | 
|  | 2189 |  | 
|  | 2190 | Recall that the objects in an obstack are grouped into chunks.  When all | 
|  | 2191 | the objects in a chunk become free, the obstack library automatically | 
|  | 2192 | frees the chunk (@pxref{Preparing for Obstacks}).  Then other | 
|  | 2193 | obstacks, or non-obstack allocation, can reuse the space of the chunk. | 
|  | 2194 |  | 
|  | 2195 | @node Obstack Functions | 
|  | 2196 | @subsubsection Obstack Functions and Macros | 
|  | 2197 | @cindex macros | 
|  | 2198 |  | 
|  | 2199 | The interfaces for using obstacks may be defined either as functions or | 
|  | 2200 | as macros, depending on the compiler.  The obstack facility works with | 
|  | 2201 | all C compilers, including both @w{ISO C} and traditional C, but there are | 
|  | 2202 | precautions you must take if you plan to use compilers other than GNU C. | 
|  | 2203 |  | 
|  | 2204 | If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack | 
|  | 2205 | ``functions'' are actually defined only as macros.  You can call these | 
|  | 2206 | macros like functions, but you cannot use them in any other way (for | 
|  | 2207 | example, you cannot take their address). | 
|  | 2208 |  | 
|  | 2209 | Calling the macros requires a special precaution: namely, the first | 
|  | 2210 | operand (the obstack pointer) may not contain any side effects, because | 
|  | 2211 | it may be computed more than once.  For example, if you write this: | 
|  | 2212 |  | 
|  | 2213 | @smallexample | 
|  | 2214 | obstack_alloc (get_obstack (), 4); | 
|  | 2215 | @end smallexample | 
|  | 2216 |  | 
|  | 2217 | @noindent | 
|  | 2218 | you will find that @code{get_obstack} may be called several times. | 
|  | 2219 | If you use @code{*obstack_list_ptr++} as the obstack pointer argument, | 
|  | 2220 | you will get very strange results since the incrementation may occur | 
|  | 2221 | several times. | 
|  | 2222 |  | 
|  | 2223 | In @w{ISO C}, each function has both a macro definition and a function | 
|  | 2224 | definition.  The function definition is used if you take the address of the | 
|  | 2225 | function without calling it.  An ordinary call uses the macro definition by | 
|  | 2226 | default, but you can request the function definition instead by writing the | 
|  | 2227 | function name in parentheses, as shown here: | 
|  | 2228 |  | 
|  | 2229 | @smallexample | 
|  | 2230 | char *x; | 
|  | 2231 | void *(*funcp) (); | 
|  | 2232 | /* @r{Use the macro}.  */ | 
|  | 2233 | x = (char *) obstack_alloc (obptr, size); | 
|  | 2234 | /* @r{Call the function}.  */ | 
|  | 2235 | x = (char *) (obstack_alloc) (obptr, size); | 
|  | 2236 | /* @r{Take the address of the function}.  */ | 
|  | 2237 | funcp = obstack_alloc; | 
|  | 2238 | @end smallexample | 
|  | 2239 |  | 
|  | 2240 | @noindent | 
|  | 2241 | This is the same situation that exists in @w{ISO C} for the standard library | 
|  | 2242 | functions.  @xref{Macro Definitions}. | 
|  | 2243 |  | 
|  | 2244 | @strong{Warning:} When you do use the macros, you must observe the | 
|  | 2245 | precaution of avoiding side effects in the first operand, even in @w{ISO C}. | 
|  | 2246 |  | 
|  | 2247 | If you use the GNU C compiler, this precaution is not necessary, because | 
|  | 2248 | various language extensions in GNU C permit defining the macros so as to | 
|  | 2249 | compute each argument only once. | 
|  | 2250 |  | 
|  | 2251 | @node Growing Objects | 
|  | 2252 | @subsubsection Growing Objects | 
|  | 2253 | @cindex growing objects (in obstacks) | 
|  | 2254 | @cindex changing the size of a block (obstacks) | 
|  | 2255 |  | 
|  | 2256 | Because memory in obstack chunks is used sequentially, it is possible to | 
|  | 2257 | build up an object step by step, adding one or more bytes at a time to the | 
|  | 2258 | end of the object.  With this technique, you do not need to know how much | 
|  | 2259 | data you will put in the object until you come to the end of it.  We call | 
|  | 2260 | this the technique of @dfn{growing objects}.  The special functions | 
|  | 2261 | for adding data to the growing object are described in this section. | 
|  | 2262 |  | 
|  | 2263 | You don't need to do anything special when you start to grow an object. | 
|  | 2264 | Using one of the functions to add data to the object automatically | 
|  | 2265 | starts it.  However, it is necessary to say explicitly when the object is | 
|  | 2266 | finished.  This is done with the function @code{obstack_finish}. | 
|  | 2267 |  | 
|  | 2268 | The actual address of the object thus built up is not known until the | 
|  | 2269 | object is finished.  Until then, it always remains possible that you will | 
|  | 2270 | add so much data that the object must be copied into a new chunk. | 
|  | 2271 |  | 
|  | 2272 | While the obstack is in use for a growing object, you cannot use it for | 
|  | 2273 | ordinary allocation of another object.  If you try to do so, the space | 
|  | 2274 | already added to the growing object will become part of the other object. | 
|  | 2275 |  | 
|  | 2276 | @comment obstack.h | 
|  | 2277 | @comment GNU | 
|  | 2278 | @deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) | 
|  | 2279 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2280 | @c obstack_blank @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2281 | @c  _obstack_newchunk @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2282 | @c   *chunkfun dup @acsmem | 
|  | 2283 | @c   *obstack_alloc_failed_handler dup user-supplied | 
|  | 2284 | @c   *freefun | 
|  | 2285 | @c  obstack_blank_fast dup @mtsrace:obstack-ptr | 
|  | 2286 | The most basic function for adding to a growing object is | 
|  | 2287 | @code{obstack_blank}, which adds space without initializing it. | 
|  | 2288 | @end deftypefun | 
|  | 2289 |  | 
|  | 2290 | @comment obstack.h | 
|  | 2291 | @comment GNU | 
|  | 2292 | @deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) | 
|  | 2293 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2294 | @c obstack_grow @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2295 | @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2296 | @c  memcpy ok | 
|  | 2297 | To add a block of initialized space, use @code{obstack_grow}, which is | 
|  | 2298 | the growing-object analogue of @code{obstack_copy}.  It adds @var{size} | 
|  | 2299 | bytes of data to the growing object, copying the contents from | 
|  | 2300 | @var{data}. | 
|  | 2301 | @end deftypefun | 
|  | 2302 |  | 
|  | 2303 | @comment obstack.h | 
|  | 2304 | @comment GNU | 
|  | 2305 | @deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) | 
|  | 2306 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2307 | @c obstack_grow0 @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2308 | @c   (no sequence point between storing NUL and incrementing next_free) | 
|  | 2309 | @c   (multiple changes to next_free => @acucorrupt) | 
|  | 2310 | @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2311 | @c  memcpy ok | 
|  | 2312 | This is the growing-object analogue of @code{obstack_copy0}.  It adds | 
|  | 2313 | @var{size} bytes copied from @var{data}, followed by an additional null | 
|  | 2314 | character. | 
|  | 2315 | @end deftypefun | 
|  | 2316 |  | 
|  | 2317 | @comment obstack.h | 
|  | 2318 | @comment GNU | 
|  | 2319 | @deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c}) | 
|  | 2320 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2321 | @c obstack_1grow @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2322 | @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2323 | @c  obstack_1grow_fast dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2324 | To add one character at a time, use the function @code{obstack_1grow}. | 
|  | 2325 | It adds a single byte containing @var{c} to the growing object. | 
|  | 2326 | @end deftypefun | 
|  | 2327 |  | 
|  | 2328 | @comment obstack.h | 
|  | 2329 | @comment GNU | 
|  | 2330 | @deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data}) | 
|  | 2331 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2332 | @c obstack_ptr_grow @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2333 | @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2334 | @c  obstack_ptr_grow_fast dup @mtsrace:obstack-ptr | 
|  | 2335 | Adding the value of a pointer one can use the function | 
|  | 2336 | @code{obstack_ptr_grow}.  It adds @code{sizeof (void *)} bytes | 
|  | 2337 | containing the value of @var{data}. | 
|  | 2338 | @end deftypefun | 
|  | 2339 |  | 
|  | 2340 | @comment obstack.h | 
|  | 2341 | @comment GNU | 
|  | 2342 | @deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data}) | 
|  | 2343 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2344 | @c obstack_int_grow @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2345 | @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2346 | @c  obstack_int_grow_fast dup @mtsrace:obstack-ptr | 
|  | 2347 | A single value of type @code{int} can be added by using the | 
|  | 2348 | @code{obstack_int_grow} function.  It adds @code{sizeof (int)} bytes to | 
|  | 2349 | the growing object and initializes them with the value of @var{data}. | 
|  | 2350 | @end deftypefun | 
|  | 2351 |  | 
|  | 2352 | @comment obstack.h | 
|  | 2353 | @comment GNU | 
|  | 2354 | @deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr}) | 
|  | 2355 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}} | 
|  | 2356 | @c obstack_finish @mtsrace:obstack-ptr @acucorrupt | 
|  | 2357 | When you are finished growing the object, use the function | 
|  | 2358 | @code{obstack_finish} to close it off and return its final address. | 
|  | 2359 |  | 
|  | 2360 | Once you have finished the object, the obstack is available for ordinary | 
|  | 2361 | allocation or for growing another object. | 
|  | 2362 |  | 
|  | 2363 | This function can return a null pointer under the same conditions as | 
|  | 2364 | @code{obstack_alloc} (@pxref{Allocation in an Obstack}). | 
|  | 2365 | @end deftypefun | 
|  | 2366 |  | 
|  | 2367 | When you build an object by growing it, you will probably need to know | 
|  | 2368 | afterward how long it became.  You need not keep track of this as you grow | 
|  | 2369 | the object, because you can find out the length from the obstack just | 
|  | 2370 | before finishing the object with the function @code{obstack_object_size}, | 
|  | 2371 | declared as follows: | 
|  | 2372 |  | 
|  | 2373 | @comment obstack.h | 
|  | 2374 | @comment GNU | 
|  | 2375 | @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) | 
|  | 2376 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} | 
|  | 2377 | This function returns the current size of the growing object, in bytes. | 
|  | 2378 | Remember to call this function @emph{before} finishing the object. | 
|  | 2379 | After it is finished, @code{obstack_object_size} will return zero. | 
|  | 2380 | @end deftypefun | 
|  | 2381 |  | 
|  | 2382 | If you have started growing an object and wish to cancel it, you should | 
|  | 2383 | finish it and then free it, like this: | 
|  | 2384 |  | 
|  | 2385 | @smallexample | 
|  | 2386 | obstack_free (obstack_ptr, obstack_finish (obstack_ptr)); | 
|  | 2387 | @end smallexample | 
|  | 2388 |  | 
|  | 2389 | @noindent | 
|  | 2390 | This has no effect if no object was growing. | 
|  | 2391 |  | 
|  | 2392 | @cindex shrinking objects | 
|  | 2393 | You can use @code{obstack_blank} with a negative size argument to make | 
|  | 2394 | the current object smaller.  Just don't try to shrink it beyond zero | 
|  | 2395 | length---there's no telling what will happen if you do that. | 
|  | 2396 |  | 
|  | 2397 | @node Extra Fast Growing | 
|  | 2398 | @subsubsection Extra Fast Growing Objects | 
|  | 2399 | @cindex efficiency and obstacks | 
|  | 2400 |  | 
|  | 2401 | The usual functions for growing objects incur overhead for checking | 
|  | 2402 | whether there is room for the new growth in the current chunk.  If you | 
|  | 2403 | are frequently constructing objects in small steps of growth, this | 
|  | 2404 | overhead can be significant. | 
|  | 2405 |  | 
|  | 2406 | You can reduce the overhead by using special ``fast growth'' | 
|  | 2407 | functions that grow the object without checking.  In order to have a | 
|  | 2408 | robust program, you must do the checking yourself.  If you do this checking | 
|  | 2409 | in the simplest way each time you are about to add data to the object, you | 
|  | 2410 | have not saved anything, because that is what the ordinary growth | 
|  | 2411 | functions do.  But if you can arrange to check less often, or check | 
|  | 2412 | more efficiently, then you make the program faster. | 
|  | 2413 |  | 
|  | 2414 | The function @code{obstack_room} returns the amount of room available | 
|  | 2415 | in the current chunk.  It is declared as follows: | 
|  | 2416 |  | 
|  | 2417 | @comment obstack.h | 
|  | 2418 | @comment GNU | 
|  | 2419 | @deftypefun int obstack_room (struct obstack *@var{obstack-ptr}) | 
|  | 2420 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} | 
|  | 2421 | This returns the number of bytes that can be added safely to the current | 
|  | 2422 | growing object (or to an object about to be started) in obstack | 
|  | 2423 | @var{obstack} using the fast growth functions. | 
|  | 2424 | @end deftypefun | 
|  | 2425 |  | 
|  | 2426 | While you know there is room, you can use these fast growth functions | 
|  | 2427 | for adding data to a growing object: | 
|  | 2428 |  | 
|  | 2429 | @comment obstack.h | 
|  | 2430 | @comment GNU | 
|  | 2431 | @deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c}) | 
|  | 2432 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} | 
|  | 2433 | @c obstack_1grow_fast @mtsrace:obstack-ptr @acucorrupt @acsmem | 
|  | 2434 | @c   (no sequence point between copying c and incrementing next_free) | 
|  | 2435 | The function @code{obstack_1grow_fast} adds one byte containing the | 
|  | 2436 | character @var{c} to the growing object in obstack @var{obstack-ptr}. | 
|  | 2437 | @end deftypefun | 
|  | 2438 |  | 
|  | 2439 | @comment obstack.h | 
|  | 2440 | @comment GNU | 
|  | 2441 | @deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data}) | 
|  | 2442 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} | 
|  | 2443 | @c obstack_ptr_grow_fast @mtsrace:obstack-ptr | 
|  | 2444 | The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)} | 
|  | 2445 | bytes containing the value of @var{data} to the growing object in | 
|  | 2446 | obstack @var{obstack-ptr}. | 
|  | 2447 | @end deftypefun | 
|  | 2448 |  | 
|  | 2449 | @comment obstack.h | 
|  | 2450 | @comment GNU | 
|  | 2451 | @deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data}) | 
|  | 2452 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} | 
|  | 2453 | @c obstack_int_grow_fast @mtsrace:obstack-ptr | 
|  | 2454 | The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes | 
|  | 2455 | containing the value of @var{data} to the growing object in obstack | 
|  | 2456 | @var{obstack-ptr}. | 
|  | 2457 | @end deftypefun | 
|  | 2458 |  | 
|  | 2459 | @comment obstack.h | 
|  | 2460 | @comment GNU | 
|  | 2461 | @deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) | 
|  | 2462 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} | 
|  | 2463 | @c obstack_blank_fast @mtsrace:obstack-ptr | 
|  | 2464 | The function @code{obstack_blank_fast} adds @var{size} bytes to the | 
|  | 2465 | growing object in obstack @var{obstack-ptr} without initializing them. | 
|  | 2466 | @end deftypefun | 
|  | 2467 |  | 
|  | 2468 | When you check for space using @code{obstack_room} and there is not | 
|  | 2469 | enough room for what you want to add, the fast growth functions | 
|  | 2470 | are not safe.  In this case, simply use the corresponding ordinary | 
|  | 2471 | growth function instead.  Very soon this will copy the object to a | 
|  | 2472 | new chunk; then there will be lots of room available again. | 
|  | 2473 |  | 
|  | 2474 | So, each time you use an ordinary growth function, check afterward for | 
|  | 2475 | sufficient space using @code{obstack_room}.  Once the object is copied | 
|  | 2476 | to a new chunk, there will be plenty of space again, so the program will | 
|  | 2477 | start using the fast growth functions again. | 
|  | 2478 |  | 
|  | 2479 | Here is an example: | 
|  | 2480 |  | 
|  | 2481 | @smallexample | 
|  | 2482 | @group | 
|  | 2483 | void | 
|  | 2484 | add_string (struct obstack *obstack, const char *ptr, int len) | 
|  | 2485 | @{ | 
|  | 2486 | while (len > 0) | 
|  | 2487 | @{ | 
|  | 2488 | int room = obstack_room (obstack); | 
|  | 2489 | if (room == 0) | 
|  | 2490 | @{ | 
|  | 2491 | /* @r{Not enough room.  Add one character slowly,} | 
|  | 2492 | @r{which may copy to a new chunk and make room.}  */ | 
|  | 2493 | obstack_1grow (obstack, *ptr++); | 
|  | 2494 | len--; | 
|  | 2495 | @} | 
|  | 2496 | else | 
|  | 2497 | @{ | 
|  | 2498 | if (room > len) | 
|  | 2499 | room = len; | 
|  | 2500 | /* @r{Add fast as much as we have room for.} */ | 
|  | 2501 | len -= room; | 
|  | 2502 | while (room-- > 0) | 
|  | 2503 | obstack_1grow_fast (obstack, *ptr++); | 
|  | 2504 | @} | 
|  | 2505 | @} | 
|  | 2506 | @} | 
|  | 2507 | @end group | 
|  | 2508 | @end smallexample | 
|  | 2509 |  | 
|  | 2510 | @node Status of an Obstack | 
|  | 2511 | @subsubsection Status of an Obstack | 
|  | 2512 | @cindex obstack status | 
|  | 2513 | @cindex status of obstack | 
|  | 2514 |  | 
|  | 2515 | Here are functions that provide information on the current status of | 
|  | 2516 | allocation in an obstack.  You can use them to learn about an object while | 
|  | 2517 | still growing it. | 
|  | 2518 |  | 
|  | 2519 | @comment obstack.h | 
|  | 2520 | @comment GNU | 
|  | 2521 | @deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr}) | 
|  | 2522 | @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}} | 
|  | 2523 | This function returns the tentative address of the beginning of the | 
|  | 2524 | currently growing object in @var{obstack-ptr}.  If you finish the object | 
|  | 2525 | immediately, it will have that address.  If you make it larger first, it | 
|  | 2526 | may outgrow the current chunk---then its address will change! | 
|  | 2527 |  | 
|  | 2528 | If no object is growing, this value says where the next object you | 
|  | 2529 | allocate will start (once again assuming it fits in the current | 
|  | 2530 | chunk). | 
|  | 2531 | @end deftypefun | 
|  | 2532 |  | 
|  | 2533 | @comment obstack.h | 
|  | 2534 | @comment GNU | 
|  | 2535 | @deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr}) | 
|  | 2536 | @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}} | 
|  | 2537 | This function returns the address of the first free byte in the current | 
|  | 2538 | chunk of obstack @var{obstack-ptr}.  This is the end of the currently | 
|  | 2539 | growing object.  If no object is growing, @code{obstack_next_free} | 
|  | 2540 | returns the same value as @code{obstack_base}. | 
|  | 2541 | @end deftypefun | 
|  | 2542 |  | 
|  | 2543 | @comment obstack.h | 
|  | 2544 | @comment GNU | 
|  | 2545 | @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) | 
|  | 2546 | @c dup | 
|  | 2547 | @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} | 
|  | 2548 | This function returns the size in bytes of the currently growing object. | 
|  | 2549 | This is equivalent to | 
|  | 2550 |  | 
|  | 2551 | @smallexample | 
|  | 2552 | obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr}) | 
|  | 2553 | @end smallexample | 
|  | 2554 | @end deftypefun | 
|  | 2555 |  | 
|  | 2556 | @node Obstacks Data Alignment | 
|  | 2557 | @subsubsection Alignment of Data in Obstacks | 
|  | 2558 | @cindex alignment (in obstacks) | 
|  | 2559 |  | 
|  | 2560 | Each obstack has an @dfn{alignment boundary}; each object allocated in | 
|  | 2561 | the obstack automatically starts on an address that is a multiple of the | 
|  | 2562 | specified boundary.  By default, this boundary is aligned so that | 
|  | 2563 | the object can hold any type of data. | 
|  | 2564 |  | 
|  | 2565 | To access an obstack's alignment boundary, use the macro | 
|  | 2566 | @code{obstack_alignment_mask}, whose function prototype looks like | 
|  | 2567 | this: | 
|  | 2568 |  | 
|  | 2569 | @comment obstack.h | 
|  | 2570 | @comment GNU | 
|  | 2571 | @deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) | 
|  | 2572 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 2573 | The value is a bit mask; a bit that is 1 indicates that the corresponding | 
|  | 2574 | bit in the address of an object should be 0.  The mask value should be one | 
|  | 2575 | less than a power of 2; the effect is that all object addresses are | 
|  | 2576 | multiples of that power of 2.  The default value of the mask is a value | 
|  | 2577 | that allows aligned objects to hold any type of data: for example, if | 
|  | 2578 | its value is 3, any type of data can be stored at locations whose | 
|  | 2579 | addresses are multiples of 4.  A mask value of 0 means an object can start | 
|  | 2580 | on any multiple of 1 (that is, no alignment is required). | 
|  | 2581 |  | 
|  | 2582 | The expansion of the macro @code{obstack_alignment_mask} is an lvalue, | 
|  | 2583 | so you can alter the mask by assignment.  For example, this statement: | 
|  | 2584 |  | 
|  | 2585 | @smallexample | 
|  | 2586 | obstack_alignment_mask (obstack_ptr) = 0; | 
|  | 2587 | @end smallexample | 
|  | 2588 |  | 
|  | 2589 | @noindent | 
|  | 2590 | has the effect of turning off alignment processing in the specified obstack. | 
|  | 2591 | @end deftypefn | 
|  | 2592 |  | 
|  | 2593 | Note that a change in alignment mask does not take effect until | 
|  | 2594 | @emph{after} the next time an object is allocated or finished in the | 
|  | 2595 | obstack.  If you are not growing an object, you can make the new | 
|  | 2596 | alignment mask take effect immediately by calling @code{obstack_finish}. | 
|  | 2597 | This will finish a zero-length object and then do proper alignment for | 
|  | 2598 | the next object. | 
|  | 2599 |  | 
|  | 2600 | @node Obstack Chunks | 
|  | 2601 | @subsubsection Obstack Chunks | 
|  | 2602 | @cindex efficiency of chunks | 
|  | 2603 | @cindex chunks | 
|  | 2604 |  | 
|  | 2605 | Obstacks work by allocating space for themselves in large chunks, and | 
|  | 2606 | then parceling out space in the chunks to satisfy your requests.  Chunks | 
|  | 2607 | are normally 4096 bytes long unless you specify a different chunk size. | 
|  | 2608 | The chunk size includes 8 bytes of overhead that are not actually used | 
|  | 2609 | for storing objects.  Regardless of the specified size, longer chunks | 
|  | 2610 | will be allocated when necessary for long objects. | 
|  | 2611 |  | 
|  | 2612 | The obstack library allocates chunks by calling the function | 
|  | 2613 | @code{obstack_chunk_alloc}, which you must define.  When a chunk is no | 
|  | 2614 | longer needed because you have freed all the objects in it, the obstack | 
|  | 2615 | library frees the chunk by calling @code{obstack_chunk_free}, which you | 
|  | 2616 | must also define. | 
|  | 2617 |  | 
|  | 2618 | These two must be defined (as macros) or declared (as functions) in each | 
|  | 2619 | source file that uses @code{obstack_init} (@pxref{Creating Obstacks}). | 
|  | 2620 | Most often they are defined as macros like this: | 
|  | 2621 |  | 
|  | 2622 | @smallexample | 
|  | 2623 | #define obstack_chunk_alloc malloc | 
|  | 2624 | #define obstack_chunk_free free | 
|  | 2625 | @end smallexample | 
|  | 2626 |  | 
|  | 2627 | Note that these are simple macros (no arguments).  Macro definitions with | 
|  | 2628 | arguments will not work!  It is necessary that @code{obstack_chunk_alloc} | 
|  | 2629 | or @code{obstack_chunk_free}, alone, expand into a function name if it is | 
|  | 2630 | not itself a function name. | 
|  | 2631 |  | 
|  | 2632 | If you allocate chunks with @code{malloc}, the chunk size should be a | 
|  | 2633 | power of 2.  The default chunk size, 4096, was chosen because it is long | 
|  | 2634 | enough to satisfy many typical requests on the obstack yet short enough | 
|  | 2635 | not to waste too much memory in the portion of the last chunk not yet used. | 
|  | 2636 |  | 
|  | 2637 | @comment obstack.h | 
|  | 2638 | @comment GNU | 
|  | 2639 | @deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr}) | 
|  | 2640 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 2641 | This returns the chunk size of the given obstack. | 
|  | 2642 | @end deftypefn | 
|  | 2643 |  | 
|  | 2644 | Since this macro expands to an lvalue, you can specify a new chunk size by | 
|  | 2645 | assigning it a new value.  Doing so does not affect the chunks already | 
|  | 2646 | allocated, but will change the size of chunks allocated for that particular | 
|  | 2647 | obstack in the future.  It is unlikely to be useful to make the chunk size | 
|  | 2648 | smaller, but making it larger might improve efficiency if you are | 
|  | 2649 | allocating many objects whose size is comparable to the chunk size.  Here | 
|  | 2650 | is how to do so cleanly: | 
|  | 2651 |  | 
|  | 2652 | @smallexample | 
|  | 2653 | if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size}) | 
|  | 2654 | obstack_chunk_size (obstack_ptr) = @var{new-chunk-size}; | 
|  | 2655 | @end smallexample | 
|  | 2656 |  | 
|  | 2657 | @node Summary of Obstacks | 
|  | 2658 | @subsubsection Summary of Obstack Functions | 
|  | 2659 |  | 
|  | 2660 | Here is a summary of all the functions associated with obstacks.  Each | 
|  | 2661 | takes the address of an obstack (@code{struct obstack *}) as its first | 
|  | 2662 | argument. | 
|  | 2663 |  | 
|  | 2664 | @table @code | 
|  | 2665 | @item void obstack_init (struct obstack *@var{obstack-ptr}) | 
|  | 2666 | Initialize use of an obstack.  @xref{Creating Obstacks}. | 
|  | 2667 |  | 
|  | 2668 | @item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) | 
|  | 2669 | Allocate an object of @var{size} uninitialized bytes. | 
|  | 2670 | @xref{Allocation in an Obstack}. | 
|  | 2671 |  | 
|  | 2672 | @item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) | 
|  | 2673 | Allocate an object of @var{size} bytes, with contents copied from | 
|  | 2674 | @var{address}.  @xref{Allocation in an Obstack}. | 
|  | 2675 |  | 
|  | 2676 | @item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) | 
|  | 2677 | Allocate an object of @var{size}+1 bytes, with @var{size} of them copied | 
|  | 2678 | from @var{address}, followed by a null character at the end. | 
|  | 2679 | @xref{Allocation in an Obstack}. | 
|  | 2680 |  | 
|  | 2681 | @item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) | 
|  | 2682 | Free @var{object} (and everything allocated in the specified obstack | 
|  | 2683 | more recently than @var{object}).  @xref{Freeing Obstack Objects}. | 
|  | 2684 |  | 
|  | 2685 | @item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) | 
|  | 2686 | Add @var{size} uninitialized bytes to a growing object. | 
|  | 2687 | @xref{Growing Objects}. | 
|  | 2688 |  | 
|  | 2689 | @item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) | 
|  | 2690 | Add @var{size} bytes, copied from @var{address}, to a growing object. | 
|  | 2691 | @xref{Growing Objects}. | 
|  | 2692 |  | 
|  | 2693 | @item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) | 
|  | 2694 | Add @var{size} bytes, copied from @var{address}, to a growing object, | 
|  | 2695 | and then add another byte containing a null character.  @xref{Growing | 
|  | 2696 | Objects}. | 
|  | 2697 |  | 
|  | 2698 | @item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char}) | 
|  | 2699 | Add one byte containing @var{data-char} to a growing object. | 
|  | 2700 | @xref{Growing Objects}. | 
|  | 2701 |  | 
|  | 2702 | @item void *obstack_finish (struct obstack *@var{obstack-ptr}) | 
|  | 2703 | Finalize the object that is growing and return its permanent address. | 
|  | 2704 | @xref{Growing Objects}. | 
|  | 2705 |  | 
|  | 2706 | @item int obstack_object_size (struct obstack *@var{obstack-ptr}) | 
|  | 2707 | Get the current size of the currently growing object.  @xref{Growing | 
|  | 2708 | Objects}. | 
|  | 2709 |  | 
|  | 2710 | @item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) | 
|  | 2711 | Add @var{size} uninitialized bytes to a growing object without checking | 
|  | 2712 | that there is enough room.  @xref{Extra Fast Growing}. | 
|  | 2713 |  | 
|  | 2714 | @item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char}) | 
|  | 2715 | Add one byte containing @var{data-char} to a growing object without | 
|  | 2716 | checking that there is enough room.  @xref{Extra Fast Growing}. | 
|  | 2717 |  | 
|  | 2718 | @item int obstack_room (struct obstack *@var{obstack-ptr}) | 
|  | 2719 | Get the amount of room now available for growing the current object. | 
|  | 2720 | @xref{Extra Fast Growing}. | 
|  | 2721 |  | 
|  | 2722 | @item int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) | 
|  | 2723 | The mask used for aligning the beginning of an object.  This is an | 
|  | 2724 | lvalue.  @xref{Obstacks Data Alignment}. | 
|  | 2725 |  | 
|  | 2726 | @item int obstack_chunk_size (struct obstack *@var{obstack-ptr}) | 
|  | 2727 | The size for allocating chunks.  This is an lvalue.  @xref{Obstack Chunks}. | 
|  | 2728 |  | 
|  | 2729 | @item void *obstack_base (struct obstack *@var{obstack-ptr}) | 
|  | 2730 | Tentative starting address of the currently growing object. | 
|  | 2731 | @xref{Status of an Obstack}. | 
|  | 2732 |  | 
|  | 2733 | @item void *obstack_next_free (struct obstack *@var{obstack-ptr}) | 
|  | 2734 | Address just after the end of the currently growing object. | 
|  | 2735 | @xref{Status of an Obstack}. | 
|  | 2736 | @end table | 
|  | 2737 |  | 
|  | 2738 | @node Variable Size Automatic | 
|  | 2739 | @subsection Automatic Storage with Variable Size | 
|  | 2740 | @cindex automatic freeing | 
|  | 2741 | @cindex @code{alloca} function | 
|  | 2742 | @cindex automatic storage with variable size | 
|  | 2743 |  | 
|  | 2744 | The function @code{alloca} supports a kind of half-dynamic allocation in | 
|  | 2745 | which blocks are allocated dynamically but freed automatically. | 
|  | 2746 |  | 
|  | 2747 | Allocating a block with @code{alloca} is an explicit action; you can | 
|  | 2748 | allocate as many blocks as you wish, and compute the size at run time.  But | 
|  | 2749 | all the blocks are freed when you exit the function that @code{alloca} was | 
|  | 2750 | called from, just as if they were automatic variables declared in that | 
|  | 2751 | function.  There is no way to free the space explicitly. | 
|  | 2752 |  | 
|  | 2753 | The prototype for @code{alloca} is in @file{stdlib.h}.  This function is | 
|  | 2754 | a BSD extension. | 
|  | 2755 | @pindex stdlib.h | 
|  | 2756 |  | 
|  | 2757 | @comment stdlib.h | 
|  | 2758 | @comment GNU, BSD | 
|  | 2759 | @deftypefun {void *} alloca (size_t @var{size}) | 
|  | 2760 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 2761 | The return value of @code{alloca} is the address of a block of @var{size} | 
|  | 2762 | bytes of memory, allocated in the stack frame of the calling function. | 
|  | 2763 | @end deftypefun | 
|  | 2764 |  | 
|  | 2765 | Do not use @code{alloca} inside the arguments of a function call---you | 
|  | 2766 | will get unpredictable results, because the stack space for the | 
|  | 2767 | @code{alloca} would appear on the stack in the middle of the space for | 
|  | 2768 | the function arguments.  An example of what to avoid is @code{foo (x, | 
|  | 2769 | alloca (4), y)}. | 
|  | 2770 | @c This might get fixed in future versions of GCC, but that won't make | 
|  | 2771 | @c it safe with compilers generally. | 
|  | 2772 |  | 
|  | 2773 | @menu | 
|  | 2774 | * Alloca Example::              Example of using @code{alloca}. | 
|  | 2775 | * Advantages of Alloca::        Reasons to use @code{alloca}. | 
|  | 2776 | * Disadvantages of Alloca::     Reasons to avoid @code{alloca}. | 
|  | 2777 | * GNU C Variable-Size Arrays::  Only in GNU C, here is an alternative | 
|  | 2778 | method of allocating dynamically and | 
|  | 2779 | freeing automatically. | 
|  | 2780 | @end menu | 
|  | 2781 |  | 
|  | 2782 | @node Alloca Example | 
|  | 2783 | @subsubsection @code{alloca} Example | 
|  | 2784 |  | 
|  | 2785 | As an example of the use of @code{alloca}, here is a function that opens | 
|  | 2786 | a file name made from concatenating two argument strings, and returns a | 
|  | 2787 | file descriptor or minus one signifying failure: | 
|  | 2788 |  | 
|  | 2789 | @smallexample | 
|  | 2790 | int | 
|  | 2791 | open2 (char *str1, char *str2, int flags, int mode) | 
|  | 2792 | @{ | 
|  | 2793 | char *name = (char *) alloca (strlen (str1) + strlen (str2) + 1); | 
|  | 2794 | stpcpy (stpcpy (name, str1), str2); | 
|  | 2795 | return open (name, flags, mode); | 
|  | 2796 | @} | 
|  | 2797 | @end smallexample | 
|  | 2798 |  | 
|  | 2799 | @noindent | 
|  | 2800 | Here is how you would get the same results with @code{malloc} and | 
|  | 2801 | @code{free}: | 
|  | 2802 |  | 
|  | 2803 | @smallexample | 
|  | 2804 | int | 
|  | 2805 | open2 (char *str1, char *str2, int flags, int mode) | 
|  | 2806 | @{ | 
|  | 2807 | char *name = (char *) malloc (strlen (str1) + strlen (str2) + 1); | 
|  | 2808 | int desc; | 
|  | 2809 | if (name == 0) | 
|  | 2810 | fatal ("virtual memory exceeded"); | 
|  | 2811 | stpcpy (stpcpy (name, str1), str2); | 
|  | 2812 | desc = open (name, flags, mode); | 
|  | 2813 | free (name); | 
|  | 2814 | return desc; | 
|  | 2815 | @} | 
|  | 2816 | @end smallexample | 
|  | 2817 |  | 
|  | 2818 | As you can see, it is simpler with @code{alloca}.  But @code{alloca} has | 
|  | 2819 | other, more important advantages, and some disadvantages. | 
|  | 2820 |  | 
|  | 2821 | @node Advantages of Alloca | 
|  | 2822 | @subsubsection Advantages of @code{alloca} | 
|  | 2823 |  | 
|  | 2824 | Here are the reasons why @code{alloca} may be preferable to @code{malloc}: | 
|  | 2825 |  | 
|  | 2826 | @itemize @bullet | 
|  | 2827 | @item | 
|  | 2828 | Using @code{alloca} wastes very little space and is very fast.  (It is | 
|  | 2829 | open-coded by the GNU C compiler.) | 
|  | 2830 |  | 
|  | 2831 | @item | 
|  | 2832 | Since @code{alloca} does not have separate pools for different sizes of | 
|  | 2833 | block, space used for any size block can be reused for any other size. | 
|  | 2834 | @code{alloca} does not cause memory fragmentation. | 
|  | 2835 |  | 
|  | 2836 | @item | 
|  | 2837 | @cindex longjmp | 
|  | 2838 | Nonlocal exits done with @code{longjmp} (@pxref{Non-Local Exits}) | 
|  | 2839 | automatically free the space allocated with @code{alloca} when they exit | 
|  | 2840 | through the function that called @code{alloca}.  This is the most | 
|  | 2841 | important reason to use @code{alloca}. | 
|  | 2842 |  | 
|  | 2843 | To illustrate this, suppose you have a function | 
|  | 2844 | @code{open_or_report_error} which returns a descriptor, like | 
|  | 2845 | @code{open}, if it succeeds, but does not return to its caller if it | 
|  | 2846 | fails.  If the file cannot be opened, it prints an error message and | 
|  | 2847 | jumps out to the command level of your program using @code{longjmp}. | 
|  | 2848 | Let's change @code{open2} (@pxref{Alloca Example}) to use this | 
|  | 2849 | subroutine:@refill | 
|  | 2850 |  | 
|  | 2851 | @smallexample | 
|  | 2852 | int | 
|  | 2853 | open2 (char *str1, char *str2, int flags, int mode) | 
|  | 2854 | @{ | 
|  | 2855 | char *name = (char *) alloca (strlen (str1) + strlen (str2) + 1); | 
|  | 2856 | stpcpy (stpcpy (name, str1), str2); | 
|  | 2857 | return open_or_report_error (name, flags, mode); | 
|  | 2858 | @} | 
|  | 2859 | @end smallexample | 
|  | 2860 |  | 
|  | 2861 | @noindent | 
|  | 2862 | Because of the way @code{alloca} works, the memory it allocates is | 
|  | 2863 | freed even when an error occurs, with no special effort required. | 
|  | 2864 |  | 
|  | 2865 | By contrast, the previous definition of @code{open2} (which uses | 
|  | 2866 | @code{malloc} and @code{free}) would develop a memory leak if it were | 
|  | 2867 | changed in this way.  Even if you are willing to make more changes to | 
|  | 2868 | fix it, there is no easy way to do so. | 
|  | 2869 | @end itemize | 
|  | 2870 |  | 
|  | 2871 | @node Disadvantages of Alloca | 
|  | 2872 | @subsubsection Disadvantages of @code{alloca} | 
|  | 2873 |  | 
|  | 2874 | @cindex @code{alloca} disadvantages | 
|  | 2875 | @cindex disadvantages of @code{alloca} | 
|  | 2876 | These are the disadvantages of @code{alloca} in comparison with | 
|  | 2877 | @code{malloc}: | 
|  | 2878 |  | 
|  | 2879 | @itemize @bullet | 
|  | 2880 | @item | 
|  | 2881 | If you try to allocate more memory than the machine can provide, you | 
|  | 2882 | don't get a clean error message.  Instead you get a fatal signal like | 
|  | 2883 | the one you would get from an infinite recursion; probably a | 
|  | 2884 | segmentation violation (@pxref{Program Error Signals}). | 
|  | 2885 |  | 
|  | 2886 | @item | 
|  | 2887 | Some @nongnusystems{} fail to support @code{alloca}, so it is less | 
|  | 2888 | portable.  However, a slower emulation of @code{alloca} written in C | 
|  | 2889 | is available for use on systems with this deficiency. | 
|  | 2890 | @end itemize | 
|  | 2891 |  | 
|  | 2892 | @node GNU C Variable-Size Arrays | 
|  | 2893 | @subsubsection GNU C Variable-Size Arrays | 
|  | 2894 | @cindex variable-sized arrays | 
|  | 2895 |  | 
|  | 2896 | In GNU C, you can replace most uses of @code{alloca} with an array of | 
|  | 2897 | variable size.  Here is how @code{open2} would look then: | 
|  | 2898 |  | 
|  | 2899 | @smallexample | 
|  | 2900 | int open2 (char *str1, char *str2, int flags, int mode) | 
|  | 2901 | @{ | 
|  | 2902 | char name[strlen (str1) + strlen (str2) + 1]; | 
|  | 2903 | stpcpy (stpcpy (name, str1), str2); | 
|  | 2904 | return open (name, flags, mode); | 
|  | 2905 | @} | 
|  | 2906 | @end smallexample | 
|  | 2907 |  | 
|  | 2908 | But @code{alloca} is not always equivalent to a variable-sized array, for | 
|  | 2909 | several reasons: | 
|  | 2910 |  | 
|  | 2911 | @itemize @bullet | 
|  | 2912 | @item | 
|  | 2913 | A variable size array's space is freed at the end of the scope of the | 
|  | 2914 | name of the array.  The space allocated with @code{alloca} | 
|  | 2915 | remains until the end of the function. | 
|  | 2916 |  | 
|  | 2917 | @item | 
|  | 2918 | It is possible to use @code{alloca} within a loop, allocating an | 
|  | 2919 | additional block on each iteration.  This is impossible with | 
|  | 2920 | variable-sized arrays. | 
|  | 2921 | @end itemize | 
|  | 2922 |  | 
|  | 2923 | @strong{NB:} If you mix use of @code{alloca} and variable-sized arrays | 
|  | 2924 | within one function, exiting a scope in which a variable-sized array was | 
|  | 2925 | declared frees all blocks allocated with @code{alloca} during the | 
|  | 2926 | execution of that scope. | 
|  | 2927 |  | 
|  | 2928 |  | 
|  | 2929 | @node Resizing the Data Segment | 
|  | 2930 | @section Resizing the Data Segment | 
|  | 2931 |  | 
|  | 2932 | The symbols in this section are declared in @file{unistd.h}. | 
|  | 2933 |  | 
|  | 2934 | You will not normally use the functions in this section, because the | 
|  | 2935 | functions described in @ref{Memory Allocation} are easier to use.  Those | 
|  | 2936 | are interfaces to a @glibcadj{} memory allocator that uses the | 
|  | 2937 | functions below itself.  The functions below are simple interfaces to | 
|  | 2938 | system calls. | 
|  | 2939 |  | 
|  | 2940 | @comment unistd.h | 
|  | 2941 | @comment BSD | 
|  | 2942 | @deftypefun int brk (void *@var{addr}) | 
|  | 2943 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 2944 |  | 
|  | 2945 | @code{brk} sets the high end of the calling process' data segment to | 
|  | 2946 | @var{addr}. | 
|  | 2947 |  | 
|  | 2948 | The address of the end of a segment is defined to be the address of the | 
|  | 2949 | last byte in the segment plus 1. | 
|  | 2950 |  | 
|  | 2951 | The function has no effect if @var{addr} is lower than the low end of | 
|  | 2952 | the data segment.  (This is considered success, by the way). | 
|  | 2953 |  | 
|  | 2954 | The function fails if it would cause the data segment to overlap another | 
|  | 2955 | segment or exceed the process' data storage limit (@pxref{Limits on | 
|  | 2956 | Resources}). | 
|  | 2957 |  | 
|  | 2958 | The function is named for a common historical case where data storage | 
|  | 2959 | and the stack are in the same segment.  Data storage allocation grows | 
|  | 2960 | upward from the bottom of the segment while the stack grows downward | 
|  | 2961 | toward it from the top of the segment and the curtain between them is | 
|  | 2962 | called the @dfn{break}. | 
|  | 2963 |  | 
|  | 2964 | The return value is zero on success.  On failure, the return value is | 
|  | 2965 | @code{-1} and @code{errno} is set accordingly.  The following @code{errno} | 
|  | 2966 | values are specific to this function: | 
|  | 2967 |  | 
|  | 2968 | @table @code | 
|  | 2969 | @item ENOMEM | 
|  | 2970 | The request would cause the data segment to overlap another segment or | 
|  | 2971 | exceed the process' data storage limit. | 
|  | 2972 | @end table | 
|  | 2973 |  | 
|  | 2974 | @c The Brk system call in Linux (as opposed to the GNU C Library function) | 
|  | 2975 | @c is considerably different.  It always returns the new end of the data | 
|  | 2976 | @c segment, whether it succeeds or fails.  The GNU C library Brk determines | 
|  | 2977 | @c it's a failure if and only if the system call returns an address less | 
|  | 2978 | @c than the address requested. | 
|  | 2979 |  | 
|  | 2980 | @end deftypefun | 
|  | 2981 |  | 
|  | 2982 |  | 
|  | 2983 | @comment unistd.h | 
|  | 2984 | @comment BSD | 
|  | 2985 | @deftypefun void *sbrk (ptrdiff_t @var{delta}) | 
|  | 2986 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 2987 |  | 
|  | 2988 | This function is the same as @code{brk} except that you specify the new | 
|  | 2989 | end of the data segment as an offset @var{delta} from the current end | 
|  | 2990 | and on success the return value is the address of the resulting end of | 
|  | 2991 | the data segment instead of zero. | 
|  | 2992 |  | 
|  | 2993 | This means you can use @samp{sbrk(0)} to find out what the current end | 
|  | 2994 | of the data segment is. | 
|  | 2995 |  | 
|  | 2996 | @end deftypefun | 
|  | 2997 |  | 
|  | 2998 |  | 
|  | 2999 |  | 
|  | 3000 | @node Locking Pages | 
|  | 3001 | @section Locking Pages | 
|  | 3002 | @cindex locking pages | 
|  | 3003 | @cindex memory lock | 
|  | 3004 | @cindex paging | 
|  | 3005 |  | 
|  | 3006 | You can tell the system to associate a particular virtual memory page | 
|  | 3007 | with a real page frame and keep it that way --- i.e., cause the page to | 
|  | 3008 | be paged in if it isn't already and mark it so it will never be paged | 
|  | 3009 | out and consequently will never cause a page fault.  This is called | 
|  | 3010 | @dfn{locking} a page. | 
|  | 3011 |  | 
|  | 3012 | The functions in this chapter lock and unlock the calling process' | 
|  | 3013 | pages. | 
|  | 3014 |  | 
|  | 3015 | @menu | 
|  | 3016 | * Why Lock Pages::                Reasons to read this section. | 
|  | 3017 | * Locked Memory Details::         Everything you need to know locked | 
|  | 3018 | memory | 
|  | 3019 | * Page Lock Functions::           Here's how to do it. | 
|  | 3020 | @end menu | 
|  | 3021 |  | 
|  | 3022 | @node Why Lock Pages | 
|  | 3023 | @subsection Why Lock Pages | 
|  | 3024 |  | 
|  | 3025 | Because page faults cause paged out pages to be paged in transparently, | 
|  | 3026 | a process rarely needs to be concerned about locking pages.  However, | 
|  | 3027 | there are two reasons people sometimes are: | 
|  | 3028 |  | 
|  | 3029 | @itemize @bullet | 
|  | 3030 |  | 
|  | 3031 | @item | 
|  | 3032 | Speed.  A page fault is transparent only insofar as the process is not | 
|  | 3033 | sensitive to how long it takes to do a simple memory access.  Time-critical | 
|  | 3034 | processes, especially realtime processes, may not be able to wait or | 
|  | 3035 | may not be able to tolerate variance in execution speed. | 
|  | 3036 | @cindex realtime processing | 
|  | 3037 | @cindex speed of execution | 
|  | 3038 |  | 
|  | 3039 | A process that needs to lock pages for this reason probably also needs | 
|  | 3040 | priority among other processes for use of the CPU.  @xref{Priority}. | 
|  | 3041 |  | 
|  | 3042 | In some cases, the programmer knows better than the system's demand | 
|  | 3043 | paging allocator which pages should remain in real memory to optimize | 
|  | 3044 | system performance.  In this case, locking pages can help. | 
|  | 3045 |  | 
|  | 3046 | @item | 
|  | 3047 | Privacy.  If you keep secrets in virtual memory and that virtual memory | 
|  | 3048 | gets paged out, that increases the chance that the secrets will get out. | 
|  | 3049 | If a password gets written out to disk swap space, for example, it might | 
|  | 3050 | still be there long after virtual and real memory have been wiped clean. | 
|  | 3051 |  | 
|  | 3052 | @end itemize | 
|  | 3053 |  | 
|  | 3054 | Be aware that when you lock a page, that's one fewer page frame that can | 
|  | 3055 | be used to back other virtual memory (by the same or other processes), | 
|  | 3056 | which can mean more page faults, which means the system runs more | 
|  | 3057 | slowly.  In fact, if you lock enough memory, some programs may not be | 
|  | 3058 | able to run at all for lack of real memory. | 
|  | 3059 |  | 
|  | 3060 | @node Locked Memory Details | 
|  | 3061 | @subsection Locked Memory Details | 
|  | 3062 |  | 
|  | 3063 | A memory lock is associated with a virtual page, not a real frame.  The | 
|  | 3064 | paging rule is: If a frame backs at least one locked page, don't page it | 
|  | 3065 | out. | 
|  | 3066 |  | 
|  | 3067 | Memory locks do not stack.  I.e., you can't lock a particular page twice | 
|  | 3068 | so that it has to be unlocked twice before it is truly unlocked.  It is | 
|  | 3069 | either locked or it isn't. | 
|  | 3070 |  | 
|  | 3071 | A memory lock persists until the process that owns the memory explicitly | 
|  | 3072 | unlocks it.  (But process termination and exec cause the virtual memory | 
|  | 3073 | to cease to exist, which you might say means it isn't locked any more). | 
|  | 3074 |  | 
|  | 3075 | Memory locks are not inherited by child processes.  (But note that on a | 
|  | 3076 | modern Unix system, immediately after a fork, the parent's and the | 
|  | 3077 | child's virtual address space are backed by the same real page frames, | 
|  | 3078 | so the child enjoys the parent's locks).  @xref{Creating a Process}. | 
|  | 3079 |  | 
|  | 3080 | Because of its ability to impact other processes, only the superuser can | 
|  | 3081 | lock a page.  Any process can unlock its own page. | 
|  | 3082 |  | 
|  | 3083 | The system sets limits on the amount of memory a process can have locked | 
|  | 3084 | and the amount of real memory it can have dedicated to it.  @xref{Limits | 
|  | 3085 | on Resources}. | 
|  | 3086 |  | 
|  | 3087 | In Linux, locked pages aren't as locked as you might think. | 
|  | 3088 | Two virtual pages that are not shared memory can nonetheless be backed | 
|  | 3089 | by the same real frame.  The kernel does this in the name of efficiency | 
|  | 3090 | when it knows both virtual pages contain identical data, and does it | 
|  | 3091 | even if one or both of the virtual pages are locked. | 
|  | 3092 |  | 
|  | 3093 | But when a process modifies one of those pages, the kernel must get it a | 
|  | 3094 | separate frame and fill it with the page's data.  This is known as a | 
|  | 3095 | @dfn{copy-on-write page fault}.  It takes a small amount of time and in | 
|  | 3096 | a pathological case, getting that frame may require I/O. | 
|  | 3097 | @cindex copy-on-write page fault | 
|  | 3098 | @cindex page fault, copy-on-write | 
|  | 3099 |  | 
|  | 3100 | To make sure this doesn't happen to your program, don't just lock the | 
|  | 3101 | pages.  Write to them as well, unless you know you won't write to them | 
|  | 3102 | ever.  And to make sure you have pre-allocated frames for your stack, | 
|  | 3103 | enter a scope that declares a C automatic variable larger than the | 
|  | 3104 | maximum stack size you will need, set it to something, then return from | 
|  | 3105 | its scope. | 
|  | 3106 |  | 
|  | 3107 | @node Page Lock Functions | 
|  | 3108 | @subsection Functions To Lock And Unlock Pages | 
|  | 3109 |  | 
|  | 3110 | The symbols in this section are declared in @file{sys/mman.h}.  These | 
|  | 3111 | functions are defined by POSIX.1b, but their availability depends on | 
|  | 3112 | your kernel.  If your kernel doesn't allow these functions, they exist | 
|  | 3113 | but always fail.  They @emph{are} available with a Linux kernel. | 
|  | 3114 |  | 
|  | 3115 | @strong{Portability Note:} POSIX.1b requires that when the @code{mlock} | 
|  | 3116 | and @code{munlock} functions are available, the file @file{unistd.h} | 
|  | 3117 | define the macro @code{_POSIX_MEMLOCK_RANGE} and the file | 
|  | 3118 | @code{limits.h} define the macro @code{PAGESIZE} to be the size of a | 
|  | 3119 | memory page in bytes.  It requires that when the @code{mlockall} and | 
|  | 3120 | @code{munlockall} functions are available, the @file{unistd.h} file | 
|  | 3121 | define the macro @code{_POSIX_MEMLOCK}.  @Theglibc{} conforms to | 
|  | 3122 | this requirement. | 
|  | 3123 |  | 
|  | 3124 | @comment sys/mman.h | 
|  | 3125 | @comment POSIX.1b | 
|  | 3126 | @deftypefun int mlock (const void *@var{addr}, size_t @var{len}) | 
|  | 3127 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 3128 |  | 
|  | 3129 | @code{mlock} locks a range of the calling process' virtual pages. | 
|  | 3130 |  | 
|  | 3131 | The range of memory starts at address @var{addr} and is @var{len} bytes | 
|  | 3132 | long.  Actually, since you must lock whole pages, it is the range of | 
|  | 3133 | pages that include any part of the specified range. | 
|  | 3134 |  | 
|  | 3135 | When the function returns successfully, each of those pages is backed by | 
|  | 3136 | (connected to) a real frame (is resident) and is marked to stay that | 
|  | 3137 | way.  This means the function may cause page-ins and have to wait for | 
|  | 3138 | them. | 
|  | 3139 |  | 
|  | 3140 | When the function fails, it does not affect the lock status of any | 
|  | 3141 | pages. | 
|  | 3142 |  | 
|  | 3143 | The return value is zero if the function succeeds.  Otherwise, it is | 
|  | 3144 | @code{-1} and @code{errno} is set accordingly.  @code{errno} values | 
|  | 3145 | specific to this function are: | 
|  | 3146 |  | 
|  | 3147 | @table @code | 
|  | 3148 | @item ENOMEM | 
|  | 3149 | @itemize @bullet | 
|  | 3150 | @item | 
|  | 3151 | At least some of the specified address range does not exist in the | 
|  | 3152 | calling process' virtual address space. | 
|  | 3153 | @item | 
|  | 3154 | The locking would cause the process to exceed its locked page limit. | 
|  | 3155 | @end itemize | 
|  | 3156 |  | 
|  | 3157 | @item EPERM | 
|  | 3158 | The calling process is not superuser. | 
|  | 3159 |  | 
|  | 3160 | @item EINVAL | 
|  | 3161 | @var{len} is not positive. | 
|  | 3162 |  | 
|  | 3163 | @item ENOSYS | 
|  | 3164 | The kernel does not provide @code{mlock} capability. | 
|  | 3165 |  | 
|  | 3166 | @end table | 
|  | 3167 |  | 
|  | 3168 | You can lock @emph{all} a process' memory with @code{mlockall}.  You | 
|  | 3169 | unlock memory with @code{munlock} or @code{munlockall}. | 
|  | 3170 |  | 
|  | 3171 | To avoid all page faults in a C program, you have to use | 
|  | 3172 | @code{mlockall}, because some of the memory a program uses is hidden | 
|  | 3173 | from the C code, e.g. the stack and automatic variables, and you | 
|  | 3174 | wouldn't know what address to tell @code{mlock}. | 
|  | 3175 |  | 
|  | 3176 | @end deftypefun | 
|  | 3177 |  | 
|  | 3178 | @comment sys/mman.h | 
|  | 3179 | @comment POSIX.1b | 
|  | 3180 | @deftypefun int munlock (const void *@var{addr}, size_t @var{len}) | 
|  | 3181 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 3182 |  | 
|  | 3183 | @code{munlock} unlocks a range of the calling process' virtual pages. | 
|  | 3184 |  | 
|  | 3185 | @code{munlock} is the inverse of @code{mlock} and functions completely | 
|  | 3186 | analogously to @code{mlock}, except that there is no @code{EPERM} | 
|  | 3187 | failure. | 
|  | 3188 |  | 
|  | 3189 | @end deftypefun | 
|  | 3190 |  | 
|  | 3191 | @comment sys/mman.h | 
|  | 3192 | @comment POSIX.1b | 
|  | 3193 | @deftypefun int mlockall (int @var{flags}) | 
|  | 3194 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 3195 |  | 
|  | 3196 | @code{mlockall} locks all the pages in a process' virtual memory address | 
|  | 3197 | space, and/or any that are added to it in the future.  This includes the | 
|  | 3198 | pages of the code, data and stack segment, as well as shared libraries, | 
|  | 3199 | user space kernel data, shared memory, and memory mapped files. | 
|  | 3200 |  | 
|  | 3201 | @var{flags} is a string of single bit flags represented by the following | 
|  | 3202 | macros.  They tell @code{mlockall} which of its functions you want.  All | 
|  | 3203 | other bits must be zero. | 
|  | 3204 |  | 
|  | 3205 | @table @code | 
|  | 3206 |  | 
|  | 3207 | @item MCL_CURRENT | 
|  | 3208 | Lock all pages which currently exist in the calling process' virtual | 
|  | 3209 | address space. | 
|  | 3210 |  | 
|  | 3211 | @item MCL_FUTURE | 
|  | 3212 | Set a mode such that any pages added to the process' virtual address | 
|  | 3213 | space in the future will be locked from birth.  This mode does not | 
|  | 3214 | affect future address spaces owned by the same process so exec, which | 
|  | 3215 | replaces a process' address space, wipes out @code{MCL_FUTURE}. | 
|  | 3216 | @xref{Executing a File}. | 
|  | 3217 |  | 
|  | 3218 | @end table | 
|  | 3219 |  | 
|  | 3220 | When the function returns successfully, and you specified | 
|  | 3221 | @code{MCL_CURRENT}, all of the process' pages are backed by (connected | 
|  | 3222 | to) real frames (they are resident) and are marked to stay that way. | 
|  | 3223 | This means the function may cause page-ins and have to wait for them. | 
|  | 3224 |  | 
|  | 3225 | When the process is in @code{MCL_FUTURE} mode because it successfully | 
|  | 3226 | executed this function and specified @code{MCL_CURRENT}, any system call | 
|  | 3227 | by the process that requires space be added to its virtual address space | 
|  | 3228 | fails with @code{errno} = @code{ENOMEM} if locking the additional space | 
|  | 3229 | would cause the process to exceed its locked page limit.  In the case | 
|  | 3230 | that the address space addition that can't be accommodated is stack | 
|  | 3231 | expansion, the stack expansion fails and the kernel sends a | 
|  | 3232 | @code{SIGSEGV} signal to the process. | 
|  | 3233 |  | 
|  | 3234 | When the function fails, it does not affect the lock status of any pages | 
|  | 3235 | or the future locking mode. | 
|  | 3236 |  | 
|  | 3237 | The return value is zero if the function succeeds.  Otherwise, it is | 
|  | 3238 | @code{-1} and @code{errno} is set accordingly.  @code{errno} values | 
|  | 3239 | specific to this function are: | 
|  | 3240 |  | 
|  | 3241 | @table @code | 
|  | 3242 | @item ENOMEM | 
|  | 3243 | @itemize @bullet | 
|  | 3244 | @item | 
|  | 3245 | At least some of the specified address range does not exist in the | 
|  | 3246 | calling process' virtual address space. | 
|  | 3247 | @item | 
|  | 3248 | The locking would cause the process to exceed its locked page limit. | 
|  | 3249 | @end itemize | 
|  | 3250 |  | 
|  | 3251 | @item EPERM | 
|  | 3252 | The calling process is not superuser. | 
|  | 3253 |  | 
|  | 3254 | @item EINVAL | 
|  | 3255 | Undefined bits in @var{flags} are not zero. | 
|  | 3256 |  | 
|  | 3257 | @item ENOSYS | 
|  | 3258 | The kernel does not provide @code{mlockall} capability. | 
|  | 3259 |  | 
|  | 3260 | @end table | 
|  | 3261 |  | 
|  | 3262 | You can lock just specific pages with @code{mlock}.  You unlock pages | 
|  | 3263 | with @code{munlockall} and @code{munlock}. | 
|  | 3264 |  | 
|  | 3265 | @end deftypefun | 
|  | 3266 |  | 
|  | 3267 |  | 
|  | 3268 | @comment sys/mman.h | 
|  | 3269 | @comment POSIX.1b | 
|  | 3270 | @deftypefun int munlockall (void) | 
|  | 3271 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | 
|  | 3272 |  | 
|  | 3273 | @code{munlockall} unlocks every page in the calling process' virtual | 
|  | 3274 | address space and turn off @code{MCL_FUTURE} future locking mode. | 
|  | 3275 |  | 
|  | 3276 | The return value is zero if the function succeeds.  Otherwise, it is | 
|  | 3277 | @code{-1} and @code{errno} is set accordingly.  The only way this | 
|  | 3278 | function can fail is for generic reasons that all functions and system | 
|  | 3279 | calls can fail, so there are no specific @code{errno} values. | 
|  | 3280 |  | 
|  | 3281 | @end deftypefun | 
|  | 3282 |  | 
|  | 3283 |  | 
|  | 3284 |  | 
|  | 3285 |  | 
|  | 3286 | @ignore | 
|  | 3287 | @c This was never actually implemented.  -zw | 
|  | 3288 | @node Relocating Allocator | 
|  | 3289 | @section Relocating Allocator | 
|  | 3290 |  | 
|  | 3291 | @cindex relocating memory allocator | 
|  | 3292 | Any system of dynamic memory allocation has overhead: the amount of | 
|  | 3293 | space it uses is more than the amount the program asks for.  The | 
|  | 3294 | @dfn{relocating memory allocator} achieves very low overhead by moving | 
|  | 3295 | blocks in memory as necessary, on its own initiative. | 
|  | 3296 |  | 
|  | 3297 | @c @menu | 
|  | 3298 | @c * Relocator Concepts::		How to understand relocating allocation. | 
|  | 3299 | @c * Using Relocator::		Functions for relocating allocation. | 
|  | 3300 | @c @end menu | 
|  | 3301 |  | 
|  | 3302 | @node Relocator Concepts | 
|  | 3303 | @subsection Concepts of Relocating Allocation | 
|  | 3304 |  | 
|  | 3305 | @ifinfo | 
|  | 3306 | The @dfn{relocating memory allocator} achieves very low overhead by | 
|  | 3307 | moving blocks in memory as necessary, on its own initiative. | 
|  | 3308 | @end ifinfo | 
|  | 3309 |  | 
|  | 3310 | When you allocate a block with @code{malloc}, the address of the block | 
|  | 3311 | never changes unless you use @code{realloc} to change its size.  Thus, | 
|  | 3312 | you can safely store the address in various places, temporarily or | 
|  | 3313 | permanently, as you like.  This is not safe when you use the relocating | 
|  | 3314 | memory allocator, because any and all relocatable blocks can move | 
|  | 3315 | whenever you allocate memory in any fashion.  Even calling @code{malloc} | 
|  | 3316 | or @code{realloc} can move the relocatable blocks. | 
|  | 3317 |  | 
|  | 3318 | @cindex handle | 
|  | 3319 | For each relocatable block, you must make a @dfn{handle}---a pointer | 
|  | 3320 | object in memory, designated to store the address of that block.  The | 
|  | 3321 | relocating allocator knows where each block's handle is, and updates the | 
|  | 3322 | address stored there whenever it moves the block, so that the handle | 
|  | 3323 | always points to the block.  Each time you access the contents of the | 
|  | 3324 | block, you should fetch its address anew from the handle. | 
|  | 3325 |  | 
|  | 3326 | To call any of the relocating allocator functions from a signal handler | 
|  | 3327 | is almost certainly incorrect, because the signal could happen at any | 
|  | 3328 | time and relocate all the blocks.  The only way to make this safe is to | 
|  | 3329 | block the signal around any access to the contents of any relocatable | 
|  | 3330 | block---not a convenient mode of operation.  @xref{Nonreentrancy}. | 
|  | 3331 |  | 
|  | 3332 | @node Using Relocator | 
|  | 3333 | @subsection Allocating and Freeing Relocatable Blocks | 
|  | 3334 |  | 
|  | 3335 | @pindex malloc.h | 
|  | 3336 | In the descriptions below, @var{handleptr} designates the address of the | 
|  | 3337 | handle.  All the functions are declared in @file{malloc.h}; all are GNU | 
|  | 3338 | extensions. | 
|  | 3339 |  | 
|  | 3340 | @comment malloc.h | 
|  | 3341 | @comment GNU | 
|  | 3342 | @c @deftypefun {void *} r_alloc (void **@var{handleptr}, size_t @var{size}) | 
|  | 3343 | This function allocates a relocatable block of size @var{size}.  It | 
|  | 3344 | stores the block's address in @code{*@var{handleptr}} and returns | 
|  | 3345 | a non-null pointer to indicate success. | 
|  | 3346 |  | 
|  | 3347 | If @code{r_alloc} can't get the space needed, it stores a null pointer | 
|  | 3348 | in @code{*@var{handleptr}}, and returns a null pointer. | 
|  | 3349 | @end deftypefun | 
|  | 3350 |  | 
|  | 3351 | @comment malloc.h | 
|  | 3352 | @comment GNU | 
|  | 3353 | @c @deftypefun void r_alloc_free (void **@var{handleptr}) | 
|  | 3354 | This function is the way to free a relocatable block.  It frees the | 
|  | 3355 | block that @code{*@var{handleptr}} points to, and stores a null pointer | 
|  | 3356 | in @code{*@var{handleptr}} to show it doesn't point to an allocated | 
|  | 3357 | block any more. | 
|  | 3358 | @end deftypefun | 
|  | 3359 |  | 
|  | 3360 | @comment malloc.h | 
|  | 3361 | @comment GNU | 
|  | 3362 | @c @deftypefun {void *} r_re_alloc (void **@var{handleptr}, size_t @var{size}) | 
|  | 3363 | The function @code{r_re_alloc} adjusts the size of the block that | 
|  | 3364 | @code{*@var{handleptr}} points to, making it @var{size} bytes long.  It | 
|  | 3365 | stores the address of the resized block in @code{*@var{handleptr}} and | 
|  | 3366 | returns a non-null pointer to indicate success. | 
|  | 3367 |  | 
|  | 3368 | If enough memory is not available, this function returns a null pointer | 
|  | 3369 | and does not modify @code{*@var{handleptr}}. | 
|  | 3370 | @end deftypefun | 
|  | 3371 | @end ignore | 
|  | 3372 |  | 
|  | 3373 |  | 
|  | 3374 |  | 
|  | 3375 |  | 
|  | 3376 | @ignore | 
|  | 3377 | @comment No longer available... | 
|  | 3378 |  | 
|  | 3379 | @comment @node Memory Warnings | 
|  | 3380 | @comment @section Memory Usage Warnings | 
|  | 3381 | @comment @cindex memory usage warnings | 
|  | 3382 | @comment @cindex warnings of memory almost full | 
|  | 3383 |  | 
|  | 3384 | @pindex malloc.c | 
|  | 3385 | You can ask for warnings as the program approaches running out of memory | 
|  | 3386 | space, by calling @code{memory_warnings}.  This tells @code{malloc} to | 
|  | 3387 | check memory usage every time it asks for more memory from the operating | 
|  | 3388 | system.  This is a GNU extension declared in @file{malloc.h}. | 
|  | 3389 |  | 
|  | 3390 | @comment malloc.h | 
|  | 3391 | @comment GNU | 
|  | 3392 | @comment @deftypefun void memory_warnings (void *@var{start}, void (*@var{warn-func}) (const char *)) | 
|  | 3393 | Call this function to request warnings for nearing exhaustion of virtual | 
|  | 3394 | memory. | 
|  | 3395 |  | 
|  | 3396 | The argument @var{start} says where data space begins, in memory.  The | 
|  | 3397 | allocator compares this against the last address used and against the | 
|  | 3398 | limit of data space, to determine the fraction of available memory in | 
|  | 3399 | use.  If you supply zero for @var{start}, then a default value is used | 
|  | 3400 | which is right in most circumstances. | 
|  | 3401 |  | 
|  | 3402 | For @var{warn-func}, supply a function that @code{malloc} can call to | 
|  | 3403 | warn you.  It is called with a string (a warning message) as argument. | 
|  | 3404 | Normally it ought to display the string for the user to read. | 
|  | 3405 | @end deftypefun | 
|  | 3406 |  | 
|  | 3407 | The warnings come when memory becomes 75% full, when it becomes 85% | 
|  | 3408 | full, and when it becomes 95% full.  Above 95% you get another warning | 
|  | 3409 | each time memory usage increases. | 
|  | 3410 |  | 
|  | 3411 | @end ignore |