A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
開発環境はなんでしょうか?
VC++であれば、crtdbgなどがあります。
http://d.hatena.ne.jp/wata_d/20080304/1204609100
CygwinのGccとかであればmtrace、Valgrindなどですかね。
http://blogs.dion.ne.jp/umasuke/archives/5645894 …
Linux用なんで、Cygwin環境でいけるかどうか知りませんけど。
もっと原始的には
void *mymalloc(int size)
{
void *p = malloc(size);
printf("alloc:%x\n", p);
return p;
}
void myfree(void *p)
{
printf("free:%x\n", p);
free(p);
}
#define malloc mymalloc
#define free myfree
こんな感じでallocのアドレスとfreeのアドレス一致を確認することで
可視化できます。
断片化でメモリ確保に失敗するのは、連続する物理メモリアドレスの確保など特殊な例に限ると思います。
普通のmallocによる確保では仮想メモリの確保なので、歯抜け領域しかなくても確保できます。
基本的にメモリ断片化での障害はパフォーマンス低下です。
回答ありがとうございます。
>開発環境はなんでしょうか?
VisualStadio2008 です。
crtdbgですね、参考にしたいと思います。
mymalloc() myfree()の手法、ありがとうございます。
可視化ツールとしては、デフラグの様に、メモリ使用中、未使用を色分け表示してくれるようなツールを希望していますが、確かに、お教えいただいた方法でも可視化できますね、ありがとうございます。
でも、実は、今回は使えないのです。
質問では、malloc()-free()を直接呼び出しているような、書き方をしましたが、実際は、
CreateCompatibleBitmap();
DeleteObject();
を呼び出していて、その中で、malloc()-free()を呼び出している筈だということで、あのような質問にしました。
CreateCompatibleBitmap();の中のmalloc();を呼び出している部分の書き換えはちょっと無理なので、今回は使えないのです。
>断片化でメモリ確保に失敗するのは、連続する物理メモリアドレスの確保など特殊な例に限ると思います。
そう思っていますが、メモリ確保ー開放を繰り返すと、真っ黒な画像になるなどのトラブルが発生してしまうのです。
No.1
- 回答日時:
ちょっとズレてるかもしれませんが。
監視ツールとしてはタスクマネージャーがそこそこ使いやすいです。
プログラムにデバッガを埋め込めるのなら、
簡単なmalloc、freeをラップして確保量の推移ログを取るような関数を作成したりしますね。
同時に開発環境の警告値やデバッグ機能を最高レベルに設定することで、
メモリのリークや破壊についてはある程度洗い出しできます。
これらを自動的に行ってくれるようなツールやライブラリはあるにはありますが、
無償の物でまともに動作、埋め込んでコンパイルできる物は見たことがありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- デスクトップパソコン メモリ増設をしたところPCの動作がおかしくなりました。 9 2023/03/13 21:16
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- アプリ ISOファイルをファイル名を保持して焼けるアプリ 1 2023/07/03 23:48
- CPU・メモリ・マザーボード Ivy BridgeのPCでゲームのラグを減らしたい 6 2023/04/20 23:52
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- Windows 10 Windows10が頻繁に応答なし、再起動になって困ってます 12 2022/10/20 22:55
- ドライブ・ストレージ 最近、外付けSSDというのが出回ってますが、USBメモリと比較してどっちが安い?どっちが高性能? 6 2022/04/23 10:51
- CPU・メモリ・マザーボード 質問お願いします 「「RAM2GB+拡張4GB」などと書いてあるのは、搭載されているメモリ(RAM) 6 2023/08/28 12:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
mallocについて
-
reallocについて
-
malloc呼び出し時のセグメンテ...
-
64ビットと32ビットの違い
-
mallocで確保するメモリの領域...
-
gcnew arrayによるメモリ確保に...
-
malloc、new のメモリ確保について
-
ビットをローテートするプログ...
-
stringの最大サイズ
-
大容量の静的な確保の限界値
-
座標値を読み込んである領域に...
-
MSDNがgethostbynameではなくge...
-
char*型が0x0を含む場合
-
DLLのマルチスレッドの動作につ...
-
メモリ不足になってしまう。
-
配列の添え字の最大数とは?
-
スタック破壊の上手な見つけ方...
-
OpenCV cvLoadImageについて
-
allocってなんですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
newしないオブジェクトについて
-
allocってなんですか?
-
スタック破壊の上手な見つけ方...
-
ヒープメモリの解放について
-
配列の添え字の最大数とは?
-
void*型のデータサイズ
-
c言語のポインタへの文字列入力...
-
DLLのマルチスレッドの動作につ...
-
C++で、メンバもヒープに確保さ...
-
指定したメモリアドレスの値の...
-
win32APIのHeapAlloc()の使い方...
-
ポインタのポインタの初期化法
-
プログラムが途中で強制終了し...
-
大容量の静的な確保の限界値
-
malloc呼び出し時のセグメンテ...
-
ヒープ領域の限界値設定
-
free関数で動作が止まる
-
stringの最大サイズ
-
64ビットと32ビットの違い
-
LPWSTRのコピー
おすすめ情報