nlib
NMalloc.h ファイル

nmalloc/nfree等が宣言されているファイルです。 [詳解]

#include <errno.h>
#include <stddef.h>
#include <stdlib.h>
#include <new>
#include "nn/nlib/Config.h"

[ソースコード]

クラス

struct  HeapHash
 ユーザーが利用しているヒープ内のメモリの利用状況のサマリが記述される構造体です。 [詳解]
 
struct  NMallocSettings
 nmallocの初期設定を行うパラメータを記述します。nmalloc_get_settings()を定義して設定します。 [詳解]
 

名前空間

 nn::nlib
 共通して使われる機能やプラットフォームへの依存度が高い機能が実装されます。 nlib Platform APIs も御覧ください。nlib_nsはエイリアスです。
 
 nn::nlib::heap
 heapライブラリの名前空間です。nmalloc(), nfree()等はグローバル名前空間に定義されています。
 

マクロ定義

#define NMALLOC_HEAPOPTION_ENABLE_ENV   (0x00000001)
 環境変数による設定の上書きを有効にします。
 
#define NMALLOC_HEAPOPTION_CACHE_DISABLE   (0x00000004)
 CachedHeapによるキャッシングを無効にします。 [詳解]
 
#define NMALLOC_HEAPOPTION_CHECK_0   (0x00000000)
 デフォルト設定で最も効率よく動作します。 [詳解]
 
#define NMALLOC_HEAPOPTION_CHECK_1   (0x00000008)
 16bitのメタデータを2つ設定可能にします。メモリの先頭部分のデータ破壊を検出します。 [詳解]
 
#define NLIB_REPLACE_MALLOC
 nlib_malloc()等をnmallocを利用するように定義するマクロです。
 
#define NLIB_REPLACE_MALLOC_NEW
 nlib_malloc()等をnmallocを利用するように定義し、new/deleteもそのように定義するマクロです。
 

型定義

typedef int errno_t
 inttypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
 
typedef int(* nmalloc_heapwalk_callback) (void *allocated_ptr, size_t size, void *user_ptr)
 nmalloc_walk_allocated_ptrs()から呼び出されるユーザー定義のコールバック関数です。 [詳解]
 

列挙型

enum  NMallocDumpMode {
  NMALLOC_DUMP_BASIC = 0,
  NMALLOC_DUMP_SPANS = 1,
  NMALLOC_DUMP_POINTERS = 2,
  NMALLOC_DUMP_ALL = NMALLOC_DUMP_SPANS | NMALLOC_DUMP_POINTERS
}
 nmalloc_dumpex()関数に渡す引数の型です。 [詳解]
 

関数

void nmalloc_clear_tls (void)
 実行中のスレッドにキャッシュされている割り当て可能なメモリを中央ヒープに返します。 [詳解]
 
NLIB_CHECK_RESULT void * nrealloc (void *ptr, size_t size)
 メモリの割り当てを変更します。realloc()C標準関数に相当します。 [詳解]
 
NLIB_CHECK_RESULT void * nmalloc (size_t size)
 指定バイト分のメモリ領域を確保します。malloc()C標準関数に相当します。 [詳解]
 
NLIB_CHECK_RESULT void * ncalloc (size_t nmemb, size_t size)
 0に初期化される要素とメモリの配列を割り当てます。 [詳解]
 
NLIB_CHECK_RESULT void * nmalloc_aligned (size_t size, size_t algn)
 アライメントを指定してメモリ領域を確保します。 [詳解]
 
size_t nmalloc_size (const void *ptr)
 ptrに実際に割り当てられたメモリ量を返します。 [詳解]
 
void nfree (void *p)
 メモリ領域を解放します。free()C標準関数に相当します。 [詳解]
 
void nfree_size (void *p, size_t size)
 メモリ領域を解放します。メモリのサイズ情報を利用することで高速にメモリを解放できることがあります。 [詳解]
 
errno_t nmalloc_walk_allocated_ptrs (nmalloc_heapwalk_callback func, void *user_ptr)
 ヒープにアロケートされた領域1つずつに対してコールバック関数func を呼び出します。 [詳解]
 
bool operator== (const HeapHash &rhs, const HeapHash &lhs)
 2つのサマリを比較して等価ならば、trueを返します。
 
bool operator!= (const HeapHash &rhs, const HeapHash &lhs)
 2つのサマリを比較して等価でなければ、trueを返します。
 
nmallocの初期化と終了
void nmalloc_get_settings (NMallocSettings *settings)
 ユーザーがこの関数を定義することでnmallocの初期化設定をコントロールすることができます。 [詳解]
 
void nmalloc_finalize_tls (void)
 実行中のスレッド固有のメモリを全て中央ヒープに返却します。スレッドを終了させるときに呼び出す必要があります。 [詳解]
 
エラーチェック及びデバック用関数
int nmalloc_isclean (void)
 ヒープの状態が初期化直後と同じかどうか確認します。 [詳解]
 
void nmalloc_dump (void)
 ヒープの基本的な状況をダンプします。 [詳解]
 
void nmalloc_dumpex (NMallocDumpMode mode)
 ヒープの状況をダンプします。 [詳解]
 
void nmalloc_dumpex2 (NMallocDumpMode mode, nlib_fd fd)
 ヒープの状況をダンプします。 [詳解]
 
void nmalloc_heaphash (HeapHash *hash)
 ユーザーによるメモリ確保状況を調べてサマリを作成します。 [詳解]
 
アロケートされたメモリへメタデータを付加する関数

NMallocSettingsの設定によっては、ユーザーがメタデータを付加することができます。

errno_t nmalloc_setmark1 (void *p, uint16_t mark1)
 アロケートされたメモリに情報を付加します。 [詳解]
 
errno_t nmalloc_setmark2 (void *p, uint16_t mark2)
 アロケートされたメモリに情報を付加します。 [詳解]
 
errno_t nmalloc_getmark (const void *ptr, uint16_t *mark1, uint16_t *mark2)
 アロケートされたメモリに付加された情報を取得します。 [詳解]
 
void * nmalloc_getobjptr (void *raw_ptr)
 nmalloc_heapwalk_callbackに渡されたポインタをオブジェクトへのポインタに変換します。 [詳解]
 

詳解

nmalloc/nfree等が宣言されているファイルです。

説明
nmalloc/nfreeは以下のような特長を備えています。
  • スレッドキャッシュ。スレッドローカルストレージを用いて、ロックをかけずに割り当て可能なメモリをキャッシュしておくことでロックの必要性を低減します。
  • 低断片化ヒープ。各アロケーションサイズ用のパケットをひとまとめにしたメモリブロックを用意しておき、要求されたアロケーションサイズに合わせて対応するサイズのパケットを割り当てることでメモリの断片化を低減させます。
  • 複数レベルのフリーリスト。サイズ別にフリーリストを持つことによって、ベストフィットアロケーションを高速に行うことができます。

NMalloc.h に定義があります。