a22_memman02
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* メモリ管理 #2
-(by [[K]], 2022.02.07)
** (1)
-''AMemAlc0'' (シンプルなメモリアロケータ:サイズは固定)
-''AMemAlc1'' (サイズ指定できるメモリアロケータ)
-''AMemAlcSys'' (malloc, freeを呼ぶだけのメモリアロケータ...
-''AMemAlc00'' (AMemAlc0とAMemAlcSysの内部インタフェース...
-''AClean'' (freeやデストラクタの呼び出しを自動化)
** (2)
-''AMemAlc0'' (シンプルなメモリアロケータ:サイズは固定)
--[説明]init時に決めたサイズのメモリを管理する。手持ちの...
--void AMemAlc0_init()
--void AMemAlc0_deinit()
---未返却のメモリが一つでもあるとdeinitできない(ADBGLV>=...
--void *AMemAlc0_alc()
--void AMemAlc0_fre()
---当たり前だけどalcで得たメモリ以外をfreしてはいけない(...
---二重freも当然やってはいけない(ADBGLV>=2のとき、実行時...
--AMemAlc0 *AMemAlc0_init1()
---AMemAlc1から指定したサイズのAMemAlc0を作る。
-''AMemAlc1'' (サイズ指定できるメモリアロケータ、ほぼmall...
--[説明]8, 16, 32, 64, ..., 1Gの合計28個のAMemAlc0を持っ...
--void AMemAlc1_init()
--void AMemAlc1_deinit()
---未返却のメモリが一つでもあるとdeinitできない(ADBGLV>=...
--void *AMemAlc1_alc()
--void AMemAlc1_fre()
--AMemAlc0 *AMemAlc1_getAlc() (サイズを指定すると対応する...
--void AMemAlc1_report() (現在の利用状況を画面などに出力...
-''AMemAlcSys'' (malloc, freeを呼ぶだけのメモリアロケータ...
--void AMemAlcSys_init()
--void AMemAlcSys_deinit()
--void *AMemSlcSys_alc()
--void AMemSlcSys_fre()
-''AClean'' (freeやデストラクタの呼び出しを自動化)
--AClean *AClean_init()
--void AClean_deinit()
--ACleanDat *AClean_set1()
--ACleanDat *AClean_set2()
--void AClean_out()
--void AClean_force()
** (3)
-[1]ADBGLVはデバックレベルで、コンパイル時に-DADBGLV=2の...
-[2]AMemAlc1は基本的に2のべきのサイズのメモリブロックのア...
--実験してみた(実験結果は32bitモード時のもの)
AClean c;
AClean_init(&c, ma1, 0);
ARep(10000) AMemAlc1_alc(ma1, 24, &c);
AMemAlc1_report(ma1, stdout);
AClean_out(&c);
// これだと n=10323 total=402688 になる.
// 32*10000(24*10000由来)+256*323(Cleanの内部データ由来,...
// 合計で402688バイト、10323個になる.
// 24*10000を使うために、32*10000が使われたので、効率は7...
// 当然だけど、AClean_out()後は0に戻る.
AClean c;
AClean_init(&c, ma1, 0);
AMemAlc0 alc24;
AMemAlc0_init1(&alc24, 24, ma1, 16 * 1024, &c); // ma1か...
ARep(10000) AMemAlc0_alc(&alc24, &c);
AMemAlc1_report(ma1, stdout);
AClean_out(&c);
// これだと n=339 total=329472 になる.
// 16k*15(24*10000由来)+256*323(Cleanの内部データ由来,25...
// 合計で329472バイト、339個になる.
// 24*10000のために、16k*15+1K*1が使われたので、効率は97...
// 当然だけど、AClean_out()後は0に戻る.
-[3]今のところ、AMemAlc0とAMemAlc1にはかなり満足している...
-[4]ACleanにデストラクタやfree呼び出しを任せてしまえばプ...
-[5]木構造などを構築する際に、ノードを専用のメモリアロケ...
-[6]longjmpとかでAClean_force()が重要になるということを考...
終了行:
* メモリ管理 #2
-(by [[K]], 2022.02.07)
** (1)
-''AMemAlc0'' (シンプルなメモリアロケータ:サイズは固定)
-''AMemAlc1'' (サイズ指定できるメモリアロケータ)
-''AMemAlcSys'' (malloc, freeを呼ぶだけのメモリアロケータ...
-''AMemAlc00'' (AMemAlc0とAMemAlcSysの内部インタフェース...
-''AClean'' (freeやデストラクタの呼び出しを自動化)
** (2)
-''AMemAlc0'' (シンプルなメモリアロケータ:サイズは固定)
--[説明]init時に決めたサイズのメモリを管理する。手持ちの...
--void AMemAlc0_init()
--void AMemAlc0_deinit()
---未返却のメモリが一つでもあるとdeinitできない(ADBGLV>=...
--void *AMemAlc0_alc()
--void AMemAlc0_fre()
---当たり前だけどalcで得たメモリ以外をfreしてはいけない(...
---二重freも当然やってはいけない(ADBGLV>=2のとき、実行時...
--AMemAlc0 *AMemAlc0_init1()
---AMemAlc1から指定したサイズのAMemAlc0を作る。
-''AMemAlc1'' (サイズ指定できるメモリアロケータ、ほぼmall...
--[説明]8, 16, 32, 64, ..., 1Gの合計28個のAMemAlc0を持っ...
--void AMemAlc1_init()
--void AMemAlc1_deinit()
---未返却のメモリが一つでもあるとdeinitできない(ADBGLV>=...
--void *AMemAlc1_alc()
--void AMemAlc1_fre()
--AMemAlc0 *AMemAlc1_getAlc() (サイズを指定すると対応する...
--void AMemAlc1_report() (現在の利用状況を画面などに出力...
-''AMemAlcSys'' (malloc, freeを呼ぶだけのメモリアロケータ...
--void AMemAlcSys_init()
--void AMemAlcSys_deinit()
--void *AMemSlcSys_alc()
--void AMemSlcSys_fre()
-''AClean'' (freeやデストラクタの呼び出しを自動化)
--AClean *AClean_init()
--void AClean_deinit()
--ACleanDat *AClean_set1()
--ACleanDat *AClean_set2()
--void AClean_out()
--void AClean_force()
** (3)
-[1]ADBGLVはデバックレベルで、コンパイル時に-DADBGLV=2の...
-[2]AMemAlc1は基本的に2のべきのサイズのメモリブロックのア...
--実験してみた(実験結果は32bitモード時のもの)
AClean c;
AClean_init(&c, ma1, 0);
ARep(10000) AMemAlc1_alc(ma1, 24, &c);
AMemAlc1_report(ma1, stdout);
AClean_out(&c);
// これだと n=10323 total=402688 になる.
// 32*10000(24*10000由来)+256*323(Cleanの内部データ由来,...
// 合計で402688バイト、10323個になる.
// 24*10000を使うために、32*10000が使われたので、効率は7...
// 当然だけど、AClean_out()後は0に戻る.
AClean c;
AClean_init(&c, ma1, 0);
AMemAlc0 alc24;
AMemAlc0_init1(&alc24, 24, ma1, 16 * 1024, &c); // ma1か...
ARep(10000) AMemAlc0_alc(&alc24, &c);
AMemAlc1_report(ma1, stdout);
AClean_out(&c);
// これだと n=339 total=329472 になる.
// 16k*15(24*10000由来)+256*323(Cleanの内部データ由来,25...
// 合計で329472バイト、339個になる.
// 24*10000のために、16k*15+1K*1が使われたので、効率は97...
// 当然だけど、AClean_out()後は0に戻る.
-[3]今のところ、AMemAlc0とAMemAlc1にはかなり満足している...
-[4]ACleanにデストラクタやfree呼び出しを任せてしまえばプ...
-[5]木構造などを構築する際に、ノードを専用のメモリアロケ...
-[6]longjmpとかでAClean_force()が重要になるということを考...
ページ名: