🔰 はじめに
Ichimi(いちみ)は、CSV に記録したメモリの確保・解放の記録をヒートマップとして可視化するツールです。
👇👇 Ichimi(いちみ)のダウンロードや基本的な使い方 👇👇
💾 Ichimi(いちみ)ダウンロード(BOOTH)
📝 new / delete を“見える化”する!メモリ可視化ツール「Ichimi(いちみ)」入門
プログラムが複雑になると「このメモリどこで確保されたの?」という疑問が頻発します。
そんなときに役立つのが「ラベル機能」です。
Ichimi(いちみ)では、確保・解放されたメモリブロックに任意のラベルを付加して記録した CSV を "見える化" できます。
今回はこの ラベル機能 を使って、確保されたメモリの呼び出し元を見てみようと思います。
では、さっそく...
🧪 サンプルコードと CSV
サンプルコード
void test01()
{
ScopedLabel label( __func__ );
char* ptr = new char[ 100 ]; // 100 バイト確保
delete[] ptr; // 解放
}
void test02()
{
ScopedLabel label( __func__ );
char* ptr = new char[ 50 ]; // 50 バイト確保
delete[] ptr; // 解放
}
void test()
{
test01();
test02();
}
サンプルコードで記録した CSV
0174E570,100,malloc,test01
0174E570,0,free,test01
0174E438,50,malloc,test02
0174E438,0,free,test02
サンプル解説
- 関数 test01、test02 があり、それぞれの関数内でメモリを確保 → 解放
- 各関数の最初で ScopedLabel クラスを利用して、CSV にラベルとして関数名を記録
- ScopedLabel は Ichimi のログシステムにラベル(識別子)を、関数(スコープ)の終了まで設定するクラスです。
- __func__ は関数名を自動で取得する C/C++ の組み込みマクロです。
👀 観察
では、Ichimi(いちみ)て CSV を読み込んで、観察してみましょう。
- ブロックサイズを「1B」にしましょう。
- 履歴スライダーを左から右に動かしながら、確保 → 解放の流れとラベル表示を確認しましょう。
- 赤い確保ブロックをクリックすると、画面右にラベル(関数名)が表示されます。
- ラベルで test01, test02 で確保されたメモリを明確に区別できます。
🧩 実務や教育での活用・応用
サンプルのように関数名をラベルとして設定すると、各ブロックがどの関数から発生したものかが一目瞭然です。
さらにラベル機能を上手に利用すれば、学習やバグ調査の精度・スピードが格段に上がります。
たとえば...
- 実務:メモリ確保のトラッキング・最適化に便利
- 学習:初学者が「どこで何をしているか」を視覚的に理解できる
- 応用:ラベルに ID やハッシュをつければ、さらに詳細な追跡も可能
🛠️ Ichimi(いちみ)を使ってみませんか?
Ichimi(いちみ)は、CSV に記録したメモリの確保・解放の記録をヒートマップとして可視化するだけでなく、今回のサンプルで利用したように学習や調査の手助けもしてくれます。
ぜひ体感してみてください!
👇👇 Ichimi(いちみ)のダウンロードや基本的な使い方 👇👇
💾 Ichimi(いちみ)ダウンロード(BOOTH)
📝 new / delete を“見える化”する!メモリ可視化ツール「Ichimi(いちみ)」入門
今回の記事で利用したサンプルを含めた体験キットを準備中です✨