More Related Content
Similar to 高度に最適化された移植可能なメモリマネージャ
Similar to 高度に最適化された移植可能なメモリマネージャ (20)
高度に最適化された移植可能なメモリマネージャ
- 4. アジェンダ
• ゲームでのメモリマネージャについて
• Small Block Allocator
• Medium Block Allocator
• Large Block Allocator
- 6. dlmalloc
• Doug Lea’s malloc
• http://g.oswego.edu/dl/html/malloc.html
• 非常に良い実装だが、汎用的である
→ゲーム用にカスタマイズする
- 8. ゲーム用メモリマネージャ
• キャッシュラインを意識する
• 空き領域を検索しない
• 高速なアロケート
• デバッグの容易性
• バッファオーバーフローしても管理領域
が壊れにくい
• フラグメンテーションが起きにくい
- 9. 管理領域
✕ ○
確保領域A 確保領域A
管理領域A
確保領域B
確保領域B
管理領域A
管理領域B 管理領域B
確保領域Aがバッファオー 確保領域Aがバッファオー
バーフローすると、管理領 バーフローしても、管理領
域を破壊してしまう 域は破壊されない
→バグの追跡が困難になる
- 12. 複数のアロケータ
メモリ確保量(byte) メモリ確保頻度
0 少ない
Small Block Allocator
256
Medium Block Allocator
4096
Large Block Allocator
多い
- 16. 管理領域
• 32byte=1ブロック
• ブロックの空き状態をビット列で管理す
る
struct Header
{
uint32_t emptyBlockBit[4];//空きブロックのビットマスク
uint32_t emptyBlockCount;//空きブロック数(ベリファイ用)
uint32_t blockSize;//ブロックサイズ
uint32_t* pPrePage;//前ページへのポインタ
uint32_t* pNextPage; //次ページへのポインタ
}
- 23. allocとfree
• Small Block Allocatorとほぼ同じ
• allocは可変長のメモリサイズを扱っている
ため、Small Block Allocatorよりは処理が重
め
• freeは空きブロックがなくなったらOSに
ページを返す
- 26. 応用
• Small Block Allocatorのアプローチで
Mediumサイズのメモリ確保も行えるの
では?
• 1ブロックサイズをメモリ確保サイズに
よって変えても良いのでは?