Memory Allocation

Memory Allocation

These functions provide support for allocating and freeing memory.

If any call to allocate memory using functions g_new(), g_new0(), g_renew(), g_malloc(), g_malloc0(), g_malloc0_n(), g_realloc() and g_realloc_n() fails, the application is terminated. This also means that there is no need to check if the call succeeded.

On the other hand, the g_try_…() family of functions returns NULL on failure that can be used as a check for unsuccessful memory allocation. The application is not terminated in this case.

As all GLib functions and data structures use g_malloc() internally, unless otherwise specified, any allocation failure will result in the application being terminated.

It’s important to match g_malloc() (and wrappers such as g_new()) with g_free(), g_slice_alloc() (and wrappers such as g_slice_new()) with g_slice_free(), plain malloc() with free(), and (if you’re using C++) new with delete and new[] with delete[]. Otherwise bad things can happen, since these allocators may use different memory pools (and new/delete call constructors and destructors).

Since GLib 2.46, g_malloc() is hardcoded to always use the system malloc implementation.

Struct Allocations

Block Allocations

Free Functions

In addition, the g_mem_gc_friendly exported variable will be true if GLib has been run with G_DEBUG=gc-friendly. If so, memory to be freed will be cleared to zero before being freed.

Stack Allocations

Aligned Allocations

Copies and Moves

Deprecated API