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 |