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