1

こんにちは。

オペレーティング システム: Windows 7 x64 SP1; TBB バージョン: 4.2.0; コンパイラ: Visual Studio 2012。

問題の説明:

TBB は、MFC アプリケーションの終了時にメモリ リークをダンプします。単純なコマンド ライン プログラムから使用した場合、同じコードはリークをダンプしません。DLL のアンロード順序の問題のようです。tbb.dll のアンロードが遅いため、デバッガーはいくつかの静的変数をリークとしてダンプします。

誰かがこの問題を確認できますか? 回避策はありますか?

この質問はインテル フォーラムにも投稿しました。そこには、コマンド ラインと MFC の両方のテスト アプリケーションがあります。

メモリダンプは次のとおりです。

Detected memory leaks!
Dumping objects ->
{608} normal block at 0x00457970, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{607} normal block at 0x00457918, 28 bytes long.
 Data: <    pyE         > 00 00 00 00 70 79 45 00 98 0F 00 00 00 00 00 00
{605} normal block at 0x0044ED98, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{590} normal block at 0x00450AD8, 28 bytes long.
 Data: <      D         > 00 00 00 00 98 ED 44 00 04 20 00 00 00 00 00 00
{583} normal block at 0x00455AD8, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{582} normal block at 0x00455A80, 28 bytes long.
 Data: <     ZE  .      > 00 00 00 00 D8 5A 45 00 98 2E 00 00 00 00 00 00
{580} normal block at 0x00455860, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{579} normal block at 0x00455808, 28 bytes long.
 Data: <    `XE         > 00 00 00 00 60 58 45 00 EC 18 00 00 00 00 00 00
{569} normal block at 0x00453EC8, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{568} normal block at 0x00453E70, 28 bytes long.
 Data: <     >E  0      > 00 00 00 00 C8 3E 45 00 FC 30 00 00 00 00 00 00
{566} normal block at 0x00453C50, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{565} normal block at 0x0044D338, 28 bytes long.
 Data: <    P<E         > 00 00 00 00 50 3C 45 00 D8 08 00 00 00 00 00 00
{546} normal block at 0x0044F248, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{536} normal block at 0x00451128, 28 bytes long.
 Data: <    H D  !      > 00 00 00 00 48 F2 44 00 14 21 00 00 00 00 00 00
{531} normal block at 0x00450518, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{530} normal block at 0x004504C0, 28 bytes long.
 Data: <      E T!      > 00 00 00 00 18 05 45 00 54 21 00 00 00 00 00 00
{528} normal block at 0x00450290, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{527} normal block at 0x00450238, 28 bytes long.
 Data: <      E 8       > 00 00 00 00 90 02 45 00 38 18 00 00 00 00 00 00
{518} normal block at 0x0044EE68, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{517} normal block at 0x0044EE10, 28 bytes long.
 Data: <    h D  2      > 00 00 00 00 68 EE 44 00 B0 32 00 00 00 00 00 00
{507} normal block at 0x0044B190, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{505} normal block at 0x0044D3B0, 28 bytes long.
 Data: <      D  '      > 00 00 00 00 90 B1 44 00 18 27 00 00 00 00 00 00
Object dump complete.
The program '[12168] TbbMfcTest.exe: Native' has exited with code 0 (0x0).
4

1 に答える 1

1

TBB ソースをスパイすると、TBB がメモリ ブロックを適切に解放せずに割り当てているように見えます (つまり、market::create_one_job() は _wcsdup(name) で h->nameW の名前を割り当てます)。

これが実際に当てはまる場合は、これを Intel に報告するのが最善ですが、これが本当にメモリ リークである場合は議論に入る可能性があることに注意してください。出力ウィンドウにゼロ メモリ ダンプ レポートを保持したいのは、すぐに本物と無害なものを区別できなくなるからです。

于 2015-05-18T16:12:51.617 に答える