2

valgrindを使用して、Cアプリケーションのメモリ使用量を確認しています。最初のテストの後、valgrindは次のように報告します。

"still reachable: 2,248 bytes in 1 blocks".

コードを確認しましたが、一目で問題を見つけることができませんでした。そこで、問題を見つけるためにコードのセクションにコメントを付け始めました。

私のコードで私が去っただけでショックを受けました

int main(void)
{

}; 

そして、バイト数の違いだけで、それでもメッセージを受け取ります。

私はこれに本当に戸惑っています...

完全なメッセージは次のとおりです。

Running with options : valgrind --leak-check=full --show-reachable=yes

==2557== HEAP SUMMARY:
==2557==     in use at exit: 2,248 bytes in 1 blocks
==2557==   total heap usage: 362 allocs, 361 frees, 14,579 bytes allocated
==2557== 
==2557== 2,248 bytes in 1 blocks are still reachable in loss record 1 of 1
==2557==    at 0x4006171: calloc (vg_replace_malloc.c:593)
==2557==    by 0x4D72250B: monstartup (in /usr/lib/libc-2.15.so)
==2557==    by 0x8048650: __gmon_start__ (in /home/elias/Documents/SL_HTTP/Endosos/bin/Debug/Endosos)
==2557==    by 0x4005421: ??? (in /usr/local/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2557== 
==2557== LEAK SUMMARY:
==2557==    definitely lost: 0 bytes in 0 blocks
==2557==    indirectly lost: 0 bytes in 0 blocks
==2557==      possibly lost: 0 bytes in 0 blocks
==2557==    still reachable: 2,248 bytes in 1 blocks
==2557==         suppressed: 0 bytes in 0 blocks
==2557== 
==2557== For counts of detected and suppressed errors, rerun with: -v
==2557== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Profiling timer expired

Fedrora17でgcc4.7.2をコンパイルしています

任意のアドバイスをいただければ幸いです。ありがとう。

4

2 に答える 2

1

これはまったく問題なく、無視しても安全です。この場合、これはプロファイリングによって割り当てられたと思われるメモリです (おそらく、プロファイリングを有効にしてコードをコンパイルしているか、プロファイリングを行うライブラリにリンクしています)。

環境は、呼び出す前に一連の設定をmain行い、それらがメモリを割り当てることができます。彼らはこのメモリがプログラムが終了するまで使用されることを知っているので、終了free時に気にする必要はありません。そのメモリのほとんどは、valgrind によって「まだ到達可能」と報告され、安全に無視できます。

于 2013-01-28T15:36:48.813 に答える
0

ありがとうございます。

君は正しかった。

Code:Blocks 12.11 を使用していますが、デフォルトではコンパイラ設定で -pg が有効になっていました。

于 2013-01-28T15:55:43.660 に答える