Developer Guide


Redefining Memory Functions

In C/C++ programs, you can replace
Intel® oneAPI Math Kernel Library
memory functions that the library uses by default with your own functions. To do this, use the
memory renaming

Memory Renaming

In addition to the memkind library,
Intel® oneAPI Math Kernel Library
memory management by default uses standard C run-time memory functions to allocate or free memory. These functions can be replaced using memory renaming.
Intel® oneAPI Math Kernel Library
accesses the memory functions by pointers
i_malloc, i_free, i_calloc
, and
, which are visible at the application level. You can programmatically redefine values of these pointers to the addresses of your application's memory management functions.
Redirecting the pointers is the only correct way to use your own set of memory management functions. If you call your own memory functions without redirecting the pointers, the memory will get managed by two independent memory management packages, which may cause unexpected memory issues.

How to Redefine Memory Functions

To redefine memory functions, use the following procedure:
  1. Include the
    header file in your code.
    This header file contains all declarations required for replacing the memory allocation functions. The header file also describes how memory allocation can be replaced in those Intel libraries that support this feature.
  2. Redefine values of pointers
    i_malloc, i_free, i_calloc
    , and
    prior to the first call to
    Intel® oneAPI Math Kernel Library
    functions, as shown in the following example:
#include "i_malloc.h"   . . .   i_malloc  = my_malloc;   i_calloc  = my_calloc;   i_realloc = my_realloc;   i_free    = my_free;   . . . // Now you may call Intel MKL functions

Product and Performance Information


Performance varies by use, configuration and other factors. Learn more at