mallopt(3) Library Functions Manual mallopt(3) mallopt - (libc -lc) #include int mallopt(int param, int value); mallopt() ( malloc(3)). param value . param: M_ARENA_MAX . malloc(3) ( ) . . . . 0 M_ARENA_TEST. glibc 2.10 --enable-experimental-malloc glibc 2.15 . ( CentOS 5, RHEL 5). glibc . M_ARENA_MAX . tcmalloc jemalloc ( ). M_ARENA_TEST . ( M_ARENA_MAX .) . . M_ARENA_TEST 2 sizeof(long) 4 8. glibc 2.10 --enable-experimental-malloc glibc 2.15 . M_ARENA_TEST M_ARENA_MAX . M_CHECK_ACTION glibc ( ). (2 1 0) glibc : 0 stderr . "*** glibc detected ***" . 1 0 abort(3). glibc 2.4 0 backtrace(3) /proc/pid/maps ( proc(5)). 2 ( glibc 2.4) 0 . . . M_CHECK_ACTION: 0 ( ). 1 . 2 . 3 . 5 . 7 . glibc 2.3.4 M_CHECK_ACTION 3. glibc 2.3.3 1. M_CHECK_ACTION . M_MMAP_MAX mmap(2). mmap(2) . 65,536 . 0 mmap(2) . M_MMAP_THRESHOLD () M_MMAP_THRESHOLD mmap(2) sbrk(2). mmap(2) . ( .) mmap(2): mmap(2) mmap(2). 128*1024 M_MMAP_THRESHOLD. 0. DEFAULT_MMAP_THRESHOLD_MAX: 512*1024 32 4*1024*1024*sizeof(long) 64 . : glibc mmap . 128*1024 DEFAULT_MMAP_THRESHOLD_MAX . mmap mmap . mmap M_TRIM_THRESHOLD M_TOP_PAD M_MMAP_THRESHOLD M_MMAP_MAX. M_MXFAST ( glibc 2.3) " ". ( .) . . 64*sizeof(size_t)/4 ( 64 32 ). 0 80*sizeof(size_t)/4. M_MXFAST 0. M_PERTURB ( glibc 2.4) ( calloc(3)) value free(3) value. . 0. M_TOP_PAD sbrk(2) . ( .) : o M_TOP_PAD sbrk(2). o free(3) ( M_TRIM_THRESHOLD) . . M_TOP_PAD ( ) ( ). 128*1024. M_TRIM_THRESHOLD free(3) sbrk(2) . ( .) M_TRIM_THRESHOLD () sbrk(2) . 128*1024. M_TRIM_THRESHOLD -1 . M_TRIM_THRESHOLD ( ) ( ). mallopt(). . . ( mallopt() mallopt() .) set-user-ID set-group-ID. ( ): MALLOC_ARENA_MAX mallopt() M_ARENA_MAX. MALLOC_ARENA_TEST mallopt() M_ARENA_TEST. MALLOC_CHECK_ mallopt() M_CHECK_ACTION. . ( malloc_hook(3).) . ( .) M_CHECK_ACTION. . MALLOC_CHECK_ set-user-ID set-group-ID. /etc/suid-debug ( ) MALLOC_CHECK_ set-user-ID set-group-ID. MALLOC_MMAP_MAX_ mallopt() M_MMAP_MAX. MALLOC_MMAP_THRESHOLD_ mallopt() M_MMAP_THRESHOLD. MALLOC_PERTURB_ mallopt() M_PERTURB. MALLOC_TRIM_THRESHOLD_ mallopt() M_TRIM_THRESHOLD. MALLOC_TOP_PAD_ mallopt() M_TOP_PAD. mallopt() 1. 0. errno. System V param . SVID M_MXFAST M_NLBLKS M_GRAIN M_KEEP glibc. . glibc 2.0. param . glibc : mallopt(M_MXFAST, n) fastbins n. n (2k+1)*sizeof(size_t) k . mallopt() M_PERTURB value value. sizeof(size_t) : free(p) p+sizeof(size_t). M_CHECK_ACTION. ( ) M_CHECK_ACTION. (). glibc M_CHECK_ACTION: $ ./a.out; main(): returned from first free() call *** glibc detected *** ./a.out: double free or corruption (top): 0x09d30008 *** ======= Backtrace: ========= /lib/libc.so.6(+0x6c501)[0x523501] /lib/libc.so.6(+0x6dd70)[0x524d70] /lib/libc.so.6(cfree+0x6d)[0x527e5d] ./a.out[0x80485db] /lib/libc.so.6(__libc_start_main+0xe7)[0x4cdce7] ./a.out[0x8048471] ======= Memory map: ======== 001e4000-001fe000 r-xp 00000000 08:06 1083555 /lib/libgcc_s.so.1 001fe000-001ff000 r--p 00019000 08:06 1083555 /lib/libgcc_s.so.1 [some lines omitted] b7814000-b7817000 rw-p 00000000 00:00 0 bff53000-bff74000 rw-p 00000000 00:00 0 [stack] Aborted (core dumped) M_CHECK_ACTION: $ ./a.out 1; # main(): returned from first free() call *** glibc detected *** ./a.out: double free or corruption (top): 0x09cbe008 *** main(): returned from second free() call $ ./a.out 2; # main(): returned from first free() call Aborted (core dumped) $ ./a.out 0; # main(): returned from first free() call main(): returned from second free() call MALLOC_CHECK_: $ MALLOC_CHECK_=1 ./a.out; main(): returned from first free() call *** glibc detected *** ./a.out: free(): invalid pointer: 0x092c2008 *** main(): returned from second free() call #include #include #include int main(int argc, char *argv[]) { char *p; if (argc > 1) { if (mallopt(M_CHECK_ACTION, atoi(argv[1])) != 1) { fprintf(stderr, "mallopt() failed"); exit(EXIT_FAILURE); } } p = malloc(1000); if (p == NULL) { fprintf(stderr, "malloc() failed"); exit(EXIT_FAILURE); } free(p); printf("%s(): returned from first free() call\n", __func__); free(p); printf("%s(): returned from second free() call\n", __func__); exit(EXIT_SUCCESS); } mmap(2), sbrk(2), mallinfo(3), malloc(3), malloc_hook(3), malloc_info(3), malloc_stats(3), malloc_trim(3), mcheck(3), mtrace(3), posix_memalign(3) 3 . . : . 6.18 8 2026 mallopt(3)