Memory Allocation general memory-handling. These functions provide support for allocating and freeing memory. If any call to allocate memory fails, the application is terminated. This also means that there is no need to check if the call succeeded. Allocates @n_structs elements of type @struct_type. The returned pointer is cast to a pointer to the given type. If @count is 0 it returns %NULL. @struct_type: the type of the elements to allocate. @n_structs: the number of elements to allocate. @Returns: a pointer to the allocated memory, cast to a pointer to @struct_type. Allocates @n_structs elements of type @struct_type, initialized to 0's. The returned pointer is cast to a pointer to the given type. If @count is 0 it returns %NULL. @struct_type: the type of the elements to allocate. @n_structs: the number of elements to allocate. @Returns: a pointer to the allocated memory, cast to a pointer to @struct_type. Reallocates the memory pointed to by @mem, so that it now has space for @n_struct elements of type @struct_type. It returns the new address of the memory, which may have been moved. @struct_type: the type of the elements to allocate. @mem: the currently allocated memory. @n_structs: the number of elements to allocate. @Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type. Allocates @n_bytes bytes of memory. If @n_bytes is 0 it returns %NULL. @n_bytes: the number of bytes to allocate. @Returns: a pointer to the allocated memory. Allocates @n_bytes bytes of memory, initialized to 0's. If @n_bytes is 0 it returns %NULL. @n_bytes: the number of bytes to allocate. @Returns: a pointer to the allocated memory. Reallocates the memory pointed to by @mem, so that it now has space for @n_bytes bytes of memory. It returns the new address of the memory, which may have been moved. @mem may be %NULL, in which case it's considered to have zero-length. @n_bytes may be 0, in which case %NULL will be returned. @mem: the memory to reallocate. @n_bytes: new size of the memory in bytes. @Returns: the new address of the allocated memory. Attempts to allocate @n_bytes, and returns %NULL on failure. Contrast with g_malloc(), which aborts the program on failure. @n_bytes: number of bytes to allocate. @Returns: the allocated memory, or %NULL. Attempts to realloc @mem to a new size, @n_bytes, and returns %NULL on failure. Contrast with g_realloc(), which aborts the program on failure. If @mem is %NULL, behaves the same as g_try_malloc(). @mem: previously-allocated memory, or %NULL. @n_bytes: number of bytes to allocate. @Returns: the allocated memory, or %NULL. Frees the memory pointed to by @mem. If @mem is %NULL it simply returns. @mem: the memory to free. Allocates @size bytes on the stack; these bytes will be freed when the current stack frame is cleaned up. This macro essentially just wraps the alloca() function present on most UNIX variants. Thus it provides the same advantages and pitfalls as alloca(): + alloca() is very fast, as on most systems it's implemented by just adjusting the stack pointer register. + It doesn't cause any memory fragmentation, within its scope, separate alloca() blocks just build up and are released together at function end. - Allocation sizes have to fit into the current stack frame. For instance in a threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes, so be sparse with alloca() uses. - Allocation failure due to insufficient stack space is not indicated with a %NULL return like e.g. with malloc(). Instead, most systems probably handle it the same way as out of stack space situations from infinite function recursion, i.e. with a segmentation fault. - Special care has to be taken when mixing alloca() with GNU C variable sized arrays. Stack space allocated with alloca() in the same scope as a variable sized array will be freed together with the variable sized array upon exit of that scope, and not upon exit of the enclosing function scope. @size: number of bytes to allocate. @Returns: space for @size bytes, allocated on the stack Wraps g_alloca() in a more typesafe manner. @struct_type: Type of memory chunks to be allocated @n_structs: Number of chunks to be allocated @Returns: Pointer to stack space for @n_structs chunks of type @struct_type Copies a block of memory @n bytes long, from @s to @d. The source and destination areas may overlap. In order to use this function, you must include string.h yourself, because this macro will typically simply resolve to memmove() and GLib does not include string.h for you. @d: the destination address to copy the bytes to. @s: the source address to copy the bytes from. @n: the number of bytes to copy. Allocates @byte_size bytes of memory, and copies @byte_size bytes into it from @mem. If @mem is %NULL it returns %NULL. @mem: the memory to copy. @byte_size: the number of bytes to copy. @Returns: a pointer to the newly-allocated copy of the memory, or %NULL if @mem is %NULL. A set of functions used to perform memory allocation. The same #GMemVTable must be used for all allocations in the same program; a call to g_mem_set_vtable(), if it exists, should be prior to any use of GLib. @malloc: function to use for allocating memory. @realloc: function to use for reallocating memory. @free: function to use to free memory. @calloc: function to use for allocating zero-filled memory. @try_malloc: function to use for allocating memory without a default error handler. @try_realloc: function to use for reallocating memory without a default error handler. Sets the #GMemVTable to use for memory allocation. You can use this to provide custom memory allocation routines. This function must be called before using any other GLib functions. The @vtable only needs to provide malloc(), realloc(), and free() functions; GLib can provide default implementations of the others. The malloc() and realloc() implementations should return %NULL on failure, GLib will handle error-checking for you. @vtable is copied, so need not persist after this function has been called. @vtable: table of memory allocation routines. @Returns: A #GMemVTable containing profiling variants of the memory allocation functions. Use them together with g_mem_profile() in order to get information about the memory allocation pattern of your program. Outputs a summary of memory usage. It outputs the frequency of allocations of different sizes, the total number of bytes which have been allocated, the total number of bytes which have been freed, and the difference between the previous two values, i.e. the number of bytes still in use. Note that this function will not output anything unless you have previously installed the #glib_mem_profiler_table with g_mem_set_vtable().