GL CHOCO ENGINE
Loading...
Searching...
No Matches
choco_memory.h File Reference

不定期に発生するメモリ確保、解放に対応するメモリアロケータモジュールの定義 More...

#include <stddef.h>
Include dependency graph for choco_memory.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum  memory_tag_t {
  MEMORY_TAG_SYSTEM , MEMORY_TAG_STRING , MEMORY_TAG_RING_QUEUE , MEMORY_TAG_RENDERER ,
  MEMORY_TAG_FILE_IO , MEMORY_TAG_MAX
}
 メモリタグリスト More...
 
enum  memory_system_result_t {
  MEMORY_SYSTEM_SUCCESS = 0 , MEMORY_SYSTEM_INVALID_ARGUMENT , MEMORY_SYSTEM_RUNTIME_ERROR , MEMORY_SYSTEM_LIMIT_EXCEEDED ,
  MEMORY_SYSTEM_NO_MEMORY
}
 メモリシステム実行結果コードリスト More...
 

Functions

memory_system_result_t memory_system_create (void)
 メモリシステムを起動する
 
void memory_system_destroy (void)
 メモリシステムを停止する
 
memory_system_result_t memory_system_allocate (size_t size_, memory_tag_t mem_tag_, void **out_ptr_)
 容量size_のメモリを確保し、mem_tag_で指定されたメモリタグのメモリ使用量を更新する
 
void memory_system_free (void *ptr_, size_t size_, memory_tag_t mem_tag_)
 ptr_が保持する領域のメモリを解放し、mem_tag_で指定されたメモリタグのメモリ使用量を更新する
 
void memory_system_report (void)
 メモリシステムが管理しているメモリ使用量状態を標準出力に出力する
 

Detailed Description

不定期に発生するメモリ確保、解放に対応するメモリアロケータモジュールの定義

Author
chocolate-pie24

メモリトラッキング機能も有する

不定期に発生するメモリ確保要求に対するメモリ確保と、メモリトラッキング機能を提供する
メモリ確保は現状はmallocをラップしたAPIによって行う。将来的にはFreeListを実装予定
メモリトラッキングは、メモリタグごとに確保されたメモリ量を管理する
メモリタグは memory_tag_t を参照
なお、本APIで確保されるメモリは、全てmax_align_tにアライメントされている

Version
0.1
Date
2025-09-20
License
MIT License. See LICENSE file in the project root for full license text.

Enumeration Type Documentation

◆ memory_system_result_t

メモリシステム実行結果コードリスト

Enumerator
MEMORY_SYSTEM_SUCCESS 

メモリシステム成功

MEMORY_SYSTEM_INVALID_ARGUMENT 

無効な引数

MEMORY_SYSTEM_RUNTIME_ERROR 

実行時エラー

MEMORY_SYSTEM_LIMIT_EXCEEDED 

メモリ使用量管理システムの使用量が使用範囲上限を超過

MEMORY_SYSTEM_NO_MEMORY 

メモリ不足

◆ memory_tag_t

メモリタグリスト

Enumerator
MEMORY_TAG_SYSTEM 

メモリタグ: システム系

MEMORY_TAG_STRING 

メモリタグ: 文字列系

MEMORY_TAG_RING_QUEUE 

メモリタグ: リングキュー

MEMORY_TAG_RENDERER 

メモリタグ: レンダラー

MEMORY_TAG_FILE_IO 

メモリタグ: ファイルI/O

MEMORY_TAG_MAX 

メモリタグカウント用max値

Function Documentation

◆ memory_system_allocate()

memory_system_result_t memory_system_allocate ( size_t  size_,
memory_tag_t  mem_tag_,
void **  out_ptr_ 
)

容量size_のメモリを確保し、mem_tag_で指定されたメモリタグのメモリ使用量を更新する

Note
  • 割り当ての際にはmemory_tag_tを指定することで、各メモリタグごとの合計割り当てサイズと総メモリ割り当てサイズをトラッキングする
  • 本関数を使用する前に、memory_system_createでメモリシステムの初期化を行うこと
  • max_align_tでアラインされたメモリが割り当てられる
Parameters
[in]size_割り当てサイズ
[in]mem_tag_メモリタグ
[out]out_ptr_割り当てたメモリ格納先(ダブルポインタを渡す)

使用例:

memory_system_result_t ret = memory_system_create(); // メモリシステム初期化
// エラー処理
// メモリ割り当て
void* ptr = NULL;
ret = memory_system_allocate(128, MEMORY_TAG_SYSTEM, &ptr); // 128バイト割り当て
// エラー処理
memory_system_result_t memory_system_allocate(size_t size_, memory_tag_t mem_tag_, void **out_ptr_)
容量size_のメモリを確保し、mem_tag_で指定されたメモリタグのメモリ使用量を更新する
Definition: choco_memory.c:132
memory_system_result_t memory_system_create(void)
メモリシステムを起動する
Definition: choco_memory.c:73
memory_system_result_t
メモリシステム実行結果コードリスト
Definition: choco_memory.h:56
@ MEMORY_TAG_SYSTEM
Definition: choco_memory.h:44
Return values
MEMORY_SYSTEM_INVALID_ARGUMENT以下のいずれか
  • メモリシステム未初期化
  • out_ptr_ == NULL
  • *out_ptr_ != NULL
  • mem_tag_ >= MEMORY_TAG_MAX
MEMORY_SYSTEM_LIMIT_EXCEEDED以下のいずれか
  • 割り当てサイズを割り当てた結果、mem_tag_allocatedがSIZE_MAX超過
  • 割り当てサイズを割り当てた結果、total_allocatedがSIZE_MAX超過
MEMORY_SYSTEM_NO_MEMORYメモリ割り当て失敗
MEMORY_SYSTEM_SUCCESSsize_ == 0または割り当てに成功し正常終了
See also
memory_tag_t
memory_system_create

◆ memory_system_create()

memory_system_result_t memory_system_create ( void  )

メモリシステムを起動する

Note
memory_system_createでは、シングルトンで定義されたメモリシステム状態管理構造体インスタンスを初期化する このため、メモリシステムが既に初期化済みであった場合はMEMORY_SYSTEM_RUNTIME_ERRORを返す memory_system_createを再度実行する際には、memory_system_destroyを呼び出してから使用すること

使用例:

memory_system_result_t ret = memory_system_create(); // メモリシステム内部状態管理構造体インスタンスが初期化される
Return values
MEMORY_SYSTEM_RUNTIME_ERRORメモリシステムが既に初期化済み
MEMORY_SYSTEM_NO_MEMORYメモリシステム用のメモリ確保に失敗
MEMORY_SYSTEM_SUCCESSメモリシステムの初期化に成功し、正常終了
See also
memory_system_destroy

◆ memory_system_destroy()

void memory_system_destroy ( void  )

メモリシステムを停止する

Note
memory_system_destroyでは、シングルトンで定義されたメモリシステム状態管理構造体インスタンスのメモリを破棄する このため、memory_system_destroyを呼び出した後で、memory_system_allocate, memory_system_freeを呼び出すことはできない 再度memory_system_allocate, memory_system_freeを使用する際には、memory_system_createを実行してからにすること
  • 2重destroyは許可する
  • この関数を呼び出した時点でメモリシステムが管理しているメモリ使用量が0でない場合は、ワーニングメッセージを出力し、メモリシステムを破棄する

使用例:

memory_system_destroy(); // 2重destroyは許可
void memory_system_destroy(void)
メモリシステムを停止する
Definition: choco_memory.c:114
See also
memory_system_create

◆ memory_system_free()

void memory_system_free ( void *  ptr_,
size_t  size_,
memory_tag_t  mem_tag_ 
)

ptr_が保持する領域のメモリを解放し、mem_tag_で指定されたメモリタグのメモリ使用量を更新する

Note
引数にはvoid*型を渡しており、ptr_のメモリ開放後、NULLをセットすることはできない。 この仕様は、標準ライブラリのfree()の仕様に合わせた。なので、呼び出し側でメモリの解放後、NULLをセットすること。
  • メモリシステムが未初期化の場合はワーニングを出力し、何もしない
  • NULL == ptr_でワーニングを出力し、何もしない
  • mem_tag_ >= MEMORY_TAG_MAXでワーニングを出力し、何もしない
  • mem_tag_allocatedがマイナスとなる量をfreeしようとするとワーニングを出力し、何もしない
  • total_allocatedがマイナスとなる量をfreeしようとするとワーニングを出力し、何もしない

使用例:

memory_system_result_t ret = memory_system_create(); // メモリシステム初期化
// メモリ割り当て
void* ptr = NULL;
ret = memory_system_allocate(128, MEMORY_TAG_SYSTEM, &ptr); // 128バイト割り当て
// エラー処理
// メモリ解放
ptr = NULL;
void memory_system_free(void *ptr_, size_t size_, memory_tag_t mem_tag_)
ptr_が保持する領域のメモリを解放し、mem_tag_で指定されたメモリタグのメモリ使用量を更新する
Definition: choco_memory.c:177
Parameters
[in]ptr_解放メモリアドレス
[in]size_解放サイズ
[in]mem_tag_メモリタグ
See also
memory_tag_t

◆ memory_system_report()

void memory_system_report ( void  )

メモリシステムが管理しているメモリ使用量状態を標準出力に出力する

Note
  • メモリシステムが未初期化の場合はワーニングを出力し、何もしない

使用例:

memory_system_result_t ret = memory_system_create(); // メモリシステム初期化
// メモリ割り当て
void* ptr = NULL;
ret = memory_system_allocate(128, MEMORY_TAG_SYSTEM, &ptr); // 128バイト割り当て
// メモリ割り当て状態をレポート
void memory_system_report(void)
メモリシステムが管理しているメモリ使用量状態を標準出力に出力する
Definition: choco_memory.c:206