OPENSSL malloc
OPENSSL_malloc とは、 OpenSSL ライブラリが提供する メモリ確保用API malloc のラッパー関数です。
読み方
- OPENSSL_malloc
- おーぷんえすえす まろく
概要
C言語 では、メモリの確保に malloc () 、メモリの開放に free () を利用します。 OpenSSL では、OPENSSL_malloc と OPENSSL_free などのメモリ操作のラッパー関数を提供します。
OpenSSL メモリアロケーションは、 OPENSSL_xxx API によって操作されます。 OPENSSL_xxx API は、基本的に標準的なC言語の __FILE__ と __LINE__ パラメータを追加し、ローレベルの CRYPTO_xxx API を呼びます。これらの関数は、一貫性のためにパラメータを追加しません。
OPENSSL_malloc の定義
OPENSSL_malloc は、 ./include/openssl/crypto.h に define として定義されています。
# define OPENSSL_malloc(num) \ CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
OPENSSL_malloc の実体は、./crypto/mem.c の
void *CRYPTO_malloc(size_t num, const char *file, int line)
として実装されています。
CRYPTO_malloc () は、以下のように実装されています。
void *CRYPTO_malloc(size_t num, const char *file, int line) { void *ret = NULL; if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc) return malloc_impl(num, file, line); if (num == 0) return NULL; allow_customize = 0; #ifndef OPENSSL_NO_CRYPTO_MDEBUG if (call_malloc_debug) { CRYPTO_mem_debug_malloc(NULL, num, 0, file, line); ret = malloc(num); CRYPTO_mem_debug_malloc(ret, num, 1, file, line); } else { ret = malloc(num); } #else osslargused(file); osslargused(line); ret = malloc(num); #endif return ret; }
malloc_impl () は、なにか?というと関数ポインタです。 CRYPTO_set_mem_functions() を利用して、 malloc_impl に関数を設定することができます。
使い方
通常の malloc / free のように使えば良いようです。
使う意味は?
OPENSSL_malloc について言えば、OpenSSL が提供する malloc/free だからといって、特別セキュアな機能が提供されるわけではありません。 デバッグ用には、便利かもしれませんが、一方でムダなチェックが走るので、パフォーマンスを重視するなら、C言語 の malloc/free を利用したほうが良いでしょう。
関連項目
ツイート