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_nsはエイリアスです。
 
 nn::nlib::heap
 heapライブラリの名前空間です。nmalloc(), nfree()等はグローバル名前空間に定義されています。
 

マクロ定義

#define NMALLOC_HEAPOPTION_ENABLE_ENV   (0x00000001)
 環境変数による設定の上書きを有効にします。
 
#define NMALLOC_HEAPOPTION_CACHE_DISABLE   (0x00000004)
 CachedHeapによるキャッシングを無効にします。 [詳解]
 
#define NLIB_REPLACE_MALLOC
 nlib_malloc()等をnmallocを利用するように定義するマクロです。
 
#define NLIB_REPLACE_MALLOC_NEW
 nlib_malloc()等をnmallocを利用するように定義し、new/deleteもそのように定義するマクロです。
 

型定義

typedef int(* nmalloc_heapwalk_callback) (void *allocated_ptr, size_t size, void *user_ptr)
 nmalloc_walk_allocated_ptrs()から呼び出されるユーザー定義のコールバック関数です。 [詳解]
 
エラー

エラー値に関するユーティリティです。

typedef int errno_t
 inttypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
 

列挙型

enum  NMallocDumpMode {
  kNmallocDumpBasic = 0,
  kNmallocDumpSpans = 1,
  kNmallocDumpPointers = 2,
  kNmallocDumpPageSummary = 4,
  kNmallocDumpAll = kNmallocDumpSpans | kNmallocDumpPointers | kNmallocDumpPageSummary
}
 nmalloc_query()関数でkNmallocQueryDumpを指定した場合に第2引数に指定する値の型です。 [詳解]
 

関数

void * nrealloc (void *ptr, size_t size)
 メモリの割り当てを変更します。realloc()C標準関数に相当します。 [詳解]
 
void * nmalloc (size_t size)
 指定バイト分のメモリ領域を確保します。malloc()C標準関数に相当します。 [詳解]
 
void * ncalloc (size_t nmemb, size_t size)
 0に初期化される要素とメモリの配列を割り当てます。 [詳解]
 
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の初期化設定をコントロールすることができます。 [詳解]
 
エラーチェック及びデバック用関数
errno_t nmalloc_query (int query,...)
 ヒープに関する詳細なデータの取得や操作を行います。 [詳解]
 

詳解

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

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

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