MALLOC_HOOK
NAMESYNOPSIS
DESCRIPTION
CONFORMING TO
NOTES
EXAMPLE
SEE ALSO
COLOPHON
NAME
__malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook, __realloc_hook, __after_morecore_hook − malloc debugging variables
SYNOPSIS
#include <malloc.h>
void *(*__malloc_hook)(size_t size, const void *caller);
void *(*__realloc_hook)(void *ptr, size_t size, const void *caller);
void
*(*__memalign_hook)(size_t alignment,
size_t size,
const void *caller);
void (*__free_hook)(void *ptr, const void *caller);
void (*__malloc_initialize_hook)(void);
void (*__after_morecore_hook)(void);
DESCRIPTION
The GNU C library lets you modify the behavior of malloc(3), realloc(3), and free(3) by specifying appropriate hook functions. You can use these hooks to help you debug programs that use dynamic memory allocation, for example.
The variable __malloc_initialize_hook points at a function that is called once when the malloc implementation is initialized. This is a weak variable, so it can be overridden in the application with a definition like the following:
void (*__malloc_initialize_hook)(void) = my_init_hook;
Now the function my_init_hook() can do the initialization of all hooks.
The four functions pointed to by __malloc_hook, __realloc_hook, __memalign_hook, __free_hook have a prototype like the functions malloc(3), realloc(3), memalign(3), free(3), respectively, except that they have a final argument caller that gives the address of the caller of malloc(3), etc.
The variable __after_morecore_hook points at a function that is called each time after sbrk(2) was asked for more memory.
CONFORMING TO
These functions are GNU extensions.
NOTES
The use of these hook functions is not safe in multithreaded programs, and they are now deprecated. Programmers should instead preempt calls to the relevant functions by defining and exporting functions such as "malloc" and "free".
EXAMPLE
Here is a short example of how to use these variables.
#include
<stdio.h>
#include <malloc.h>
/* Prototypes
for our hooks. */
static void my_init_hook(void);
static void *my_malloc_hook(size_t, const void *);
/* Variables to
save original hooks. */
static void *(*old_malloc_hook)(size_t, const void *);
/* Override
initializing hook from the C library. */
void (*__malloc_initialize_hook) (void) = my_init_hook;
static void
my_init_hook(void)
{
old_malloc_hook = __malloc_hook;
__malloc_hook = my_malloc_hook;
}
static void *
my_malloc_hook(size_t size, const void *caller)
{
void *result;
/* Restore all
old hooks */
__malloc_hook = old_malloc_hook;
/* Call
recursively */
result = malloc(size);
/* Save
underlying hooks */
old_malloc_hook = __malloc_hook;
/* printf()
might call malloc(), so protect it too. */
printf("malloc(%u) called from %p returns %p\n",
(unsigned int) size, caller, result);
/* Restore our
own hooks */
__malloc_hook = my_malloc_hook;
return result;
}
SEE ALSO
mallinfo(3), malloc(3), mcheck(3), mtrace(3)
COLOPHON
This page is part of release 3.69 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at http://www.kernel.org/doc/man−pages/.
More Linux Commands
manpages/systemd-user.conf.5.html
systemd-user.conf(5) System and session service manager conf
When run as system instance systemd reads the configuration file system.conf, otherwise user.conf. These configuration files contain a few settings controlling
manpages/pam_close_session.3.html
pam_close_session(3) - terminate PAM session management.....
The pam_close_session function is used to indicate that an authenticated session has ended. The session should have been created with a call to pam_open_session
manpages/gnutls_openpgp_privkey_get_subkey_idx.3.html
gnutls_openpgp_privkey_get_subkey_idx(3) - API function.....
Get index of subkey. RETURNS the index of the subkey or a negative error value. SINCE 2.4.0 REPORTING BUGS Report bugs to <bug-gnutls@gnu.org>. GnuTLS home page
manpages/tcsendbreak.3.html
tcsendbreak(3) - get and set terminal attributes, line contr
The termios functions describe a general terminal interface that is provided to control asynchronous communications ports. The termios structure Many of the fun
manpages/glEvalMesh2.3gl.html
glEvalMesh2(3gl) - compute a one- or two-dimensional grid of
glMapGrid and glEvalMesh are used in tandem to efficiently generate and evaluate a series of evenly-spaced map domain values. glEvalMesh steps through the integ
manpages/prunehistory.8.html
prunehistory(8) - Remove tokens from Usenet history file....
prunehistory modifies a history(5)-format text file to remove a set of tokens from it. The tokens are removed by overwriting them with spaces, so that the size
manpages/tclvars.n.html
tclvars(n) - Variables used by Tcl - Linux manual page......
tclvars.n - The following global variables are created and managed automatically by the Tcl library. Except where noted below, these variables should normally b
manpages/ping.8.html
ping(8) - send ICMP ECHO_REQUEST to network hosts (ManPage)
ping uses the ICMP protocols mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway. ECHO_REQUEST datagrams (pings) have an IP a
manpages/gdbm.3.html
gdbm(3) - The GNU database manager. Includes dbm and ndbm co
GNU dbm is a library of routines that manages data files that contain key/data pairs. The access provided is that of storing, retrieval, and deletion by key and
manpages/TAP::Parser::Iterator::Stream.3pm.html
TAP::Parser::Iterator::Stream(3pm) - Iterator for filehandle
This is a simple iterator wrapper for reading from filehandles, used by TAP::Parser. Unless youre writing a plugin or subclassing, you probably wont need to use
manpages/netlink.3.html
netlink(3) - Netlink macros (Library - Linux man page)......
<linux/netlink.h> defines several standard macros to access or create a netlink datagram. They are similar in spirit to the macros defined in cmsg(3) for auxili
manpages/XeviGetVisualInfo.3.html
XeviGetVisualInfo(3) - X Extended Visual Information functio
The X11 Extended Visual Information extension (EVI) allows a client to determine information about core X visuals beyond what the core protocol provides. The EV
