Skip to content

Tongari-Boy/Memory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++ Memory Management Study Project

C++とSDL2を使ったメモリ管理学習用プロジェクトです。
コンシューマゲームの最適化エンジニアを目指すために簡易的な2Dゲームを用いて実装を行っています。


学習テーマ

  • スタックとヒープの違い
  • メモリレイアウトとパディング
  • オブジェクトプールによるメモリ管理
  • フリーリストによる探索コストの削減
  • アクティブリストによる不要ループの削減
  • テンプレートを使った汎用プール設計

実装済み機能

  • Pool<T, MAX> : 汎用オブジェクトプール
    • フリーリストによるO(1)のalloc
    • アクティブリストによる不要スロットのスキップ
    • 二重free検出

今後の予定

  • カスタムスタックアロケータの実装
  • カスタムヒープアロケータの実装
  • Visual Studioプロファイラによる詳細計測
  • データ指向設計(DOD)への移行

環境構築

必要なもの

  • Visual Studio 2022(C++によるデスクトップ開発)
  • CMake 3.20以上
  • SDL2(別途ダウンロードが必要)

SDL2のセットアップ

  1. SDL2公式 からSDL2-devel-x.x.x-VC.zipをダウンロード
  2. 解凍してlibs/SDL2/に配置する
MyGame/
├── CMakeLists.txt
├── README.md
├── src/
│   └── main.cpp
└── libs/
    └── SDL2/        ← ここに配置
        ├── include/
        └── lib/

ビルド手順

mkdir build
cd build
cmake ..
cmake --build .

build/Debug/MyGame.exeが生成されます。


技術スタック

項目 内容
言語 C++17
グラフィック SDL2
ビルドシステム CMake
IDE Visual Studio 2022

パフォーマンス計測結果

ヒープとプールの比較(100,000回の確保・解放)

方式 処理時間 倍率
new/delete(ヒープ) 10,272 us 1x
プール 286 us 約35倍高速

プールアロケータにより約35倍の高速化を確認。
new/deleteによるメモリフラグメンテーションと
アロケーションコストを排除した結果です。

連続アクセスとランダムアクセスの比較(100,000要素)

アクセス方式 処理時間
連続アクセス(プール) 163 us
ランダムアクセス(ヒープ) 194 us

データを連続メモリに配置することでCPUキャッシュ効率が向上します。


設計のポイント

Pool<T, MAX>の設計

Pool enemyPool;
Pool attackPool;
Pool effectPool;

型とサイズをテンプレート引数で指定するだけで
どんなオブジェクトにも使える汎用プールを実現しています。

メモリバジェットの可視化

ゲーム実行中に各プールのメモリ使用量をリアルタイムで表示します。

  • 各プールの使用中バイト数 / 最大バイト数
  • 使用率をカラーバーで可視化(緑→赤)
  • 合計メモリ使用量の表示

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages