malloc(3) Library Functions Manual malloc(3) malloc, free, calloc, realloc, reallocarray - (libc -lc) #include void *malloc(size_t size); void free(void *_Nullable p); void *calloc(size_t n, size_t size); void *realloc(void *_Nullable p, size_t size); void *reallocarray(void *_Nullable p, size_t n, size_t size); glibc ( feature_test_macros(7)): reallocarray(): glibc 2.29: _DEFAULT_SOURCE glibc 2.28 : _GNU_SOURCE malloc() malloc() size . . size 0 malloc() free(). ( " " .) free() free() p malloc() . p . p NULL . calloc() calloc() n size . . n size 0 calloc() free(). n size calloc() . malloc() : malloc(n * size); realloc() realloc() p size . . . p NULL malloc(size) size. size p NULL free(p) ( " " ). p NULL malloc . free(p). reallocarray() reallocarray() ( ) p n size . realloc(p, n * size); realloc() reallocarray() . reallocarray() . malloc() calloc() realloc() reallocarray() . NULL errno. PTRDIFF_MAX . free() errno. realloc() reallocarray() NULL p NULL . ( " " .) p ( ) p . . calloc() malloc() realloc() reallocarray() : ENOMEM . RLIMIT_AS RLIMIT_DATA getrlimit(2). /proc/sys/vm/max_map_count. attributes(7). +------------+------------------------------------+--------------------+ || | | +------------+------------------------------------+--------------------+ |malloc(), | | MT-Safe | |free(), | | | |calloc(), | | | |realloc() | | | +------------+------------------------------------+--------------------+ malloc() free() calloc() realloc() C23 POSIX.1-2024. reallocarray() POSIX.1-2024. realloc(p, 0) realloc(p, ) glibc C99 C11 POSIX.1-2001 POSIX.1-2004 POSIX.1-2008 POSIX.1-2013 POSIX.1-2017 POSIX.1-2024. C17 realloc(p, 0) C23 C17 . reallocarray() glibc. musl libc BSDs ISO C POSIX.1. gnulib realloc-posix realloc() reallocarray() ISO C POSIX.1. BSD: . malloc() free() calloc() realloc() POSIX.1-2001 C89. reallocarray() glibc 2.26. OpenBSD 5.6, FreeBSD 11.0. malloc() PTRDIFF_MAX glibc 2.30. free() errno glibc 2.33. realloc(p, 0) C89 realloc(p, 0). C99 . glibc C99. C99 glibc glibc 2.1.1 C99 ( ). . malloc() NULL . OOM. /proc/sys/vm/overcommit_memory /proc/sys/vm/oom_adj proc(5) Documentation/vm/overcommit-accounting.rst. malloc() sbrk(2). MMAP_THRESHOLD glibc malloc() mmap(2). MMAP_THRESHOLD 128 mallopt(3). 4.7 mmap(2) RLIMIT_DATA 4.7 mmap(2). (mutexes) . . glibc . ( brk(2) mmap(2)) . malloc() free() calloc() realloc(). glibc errno . free() errno errno. glibc "Replacing malloc" glibc . . malloc() mallopt(3) . glibc NULL errno POSIX . realloc(3p). POSIX errno . C POSIX . POSIX C malloc() free() calloc() realloc(). realloc(p, size) free(p) malloc(size) . POSIX.1-2024 C11 . glibc realloc() realloc(p, 0) glibc. glibc realloc(p, size?size:1). reallocarray() glibc -- -- reallocarray(p, n?n:1, size?size:1). #include #include #include #include #include #define MALLOCARRAY(n, type) ((type *) my_mallocarray(n, sizeof(type))) #define MALLOC(type) MALLOCARRAY(1, type) static inline void *my_mallocarray(size_t n, size_t size); int main(void) { char *p; p = MALLOCARRAY(32, char); if (p == NULL) err(EXIT_FAILURE, "malloc"); strlcpy(p, "foo", 32); puts(p); } static inline void * my_mallocarray(size_t n, size_t size) { return reallocarray(NULL, n, size); } valgrind(1), brk(2), mmap(2), alloca(3), malloc_get_state(3), malloc_info(3), malloc_trim(3), malloc_usable_size(3), mallopt(3), mcheck(3), mtrace(3), posix_memalign(3) . 3 . . : . 6.18 8 2026 malloc(3)