インテル® MKL 2018 デベロッパー・ガイド
C/C++ プログラムでは、ライブラリーがデフォルトで使用するインテル® MKL メモリー関数を独自の関数に置換できます。置換するには、「メモリー関数名の変更」機能を使用します。
デフォルトでは、インテル® MKL メモリー管理は、標準 C ランタイムメモリー関数を使用してメモリーの割り当てと解放を行います。これらの関数は、メモリー関数名の変更機能を使用して置換することができます。
インテル® MKL は、アプリケーション・レベルで確認可能な、ポインター i_malloc、i_free、i_calloc、i_realloc を使用してメモリー関数にアクセスしています。これらのポインターは、最初は標準 C ランタイムメモリー関数 malloc、free、calloc、realloc のアドレスをそれぞれ保持しています。これらのポインターの値がアプリケーションのメモリー管理関数のアドレスを指すように、プログラムで再定義できます。
ポインターのリダイレクトは、独自のメモリー管理関数を使用するための唯一の正しい方法です。ポインターのリダイレクトを行わずに独自のメモリー関数を呼び出すと、2 つのメモリー管理パッケージでメモリーが管理されることになり、予測できないメモリー問題が発生します。
メモリー関数を再定義するには、以下の操作を行います。
スタティックにリンクしたインテル® MKL を使用している場合:
#include "i_malloc.h"
...
i_malloc = my_malloc;
i_calloc = my_calloc;
i_realloc = my_realloc;
i_free = my_free;
...
// ここでインテル® MKL 関数を呼び出すことができます。
ダイナミックにリンクしたインテル® MKL を使用している場合:
#include "i_malloc.h"
...
i_malloc_dll = my_malloc;
i_calloc_dll = my_calloc;
i_realloc_dll = my_realloc;
i_free_dll = my_free;
...
// ここでインテル® MKL 関数を呼び出すことができます。