C/C++ プログラムでは、ライブラリーがデフォルトで使用するインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のメモリー関数を独自の関数に置換できます。置換するには、「メモリー関数名の変更」機能を使用します。
インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のメモリー管理は、デフォルトで標準 C ランタイムメモリー関数を使用してメモリーの割り当てと解放を行います。これらの関数は、メモリーの名前変更を使用して置き換えることができます。
インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、アプリケーション・レベルで確認可能な、ポインター i_malloc、i_free、i_calloc、および i_realloc を使用してメモリー関数にアクセスします。これらのポインターは、最初はそれぞれ標準 C ランタイム メモリー関数 malloc、free、calloc、および realloc のアドレスを保持します。これらのポインターの値を、アプリケーションのメモリー管理関数のアドレスに再定義できます。
ポインターをリダイレクトすることが、独自のメモリー管理関数セットを使用する唯一の正しい方法です。ポインターをリダイレクトせずに独自のメモリー関数を呼び出すと、メモリーは 2 つの独立したメモリー管理パッケージによって管理され、予期しないメモリーの問題が発生する可能性があります。
メモリー関数を再定義するには、次の手順に従います。
静的にリンクされたインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) を使用している場合は、コードで i_malloc.h ヘッダーファイルをインクルードします。
#include "i_malloc.h"
. . .
i_malloc = my_malloc;
i_calloc = my_calloc;
i_realloc = my_realloc;
i_free = my_free;
. . .
// ここで oneMKL 関数を呼び出すことができます。
動的にリンクされたインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) を使用している場合は、コードで i_malloc.h ヘッダーファイルをインクルードします。
#include "i_malloc.h"
. . .
i_malloc_dll = my_malloc;
i_calloc_dll = my_calloc;
i_realloc_dll = my_realloc;
i_free_dll = my_free;
. . .
// ここで oneMKL 関数を呼び出すことができます。