Ich versuche asynchron auf Festplatte in C++ zu lesen und zu schreiben (mit der Posix AIO-Bibliothek in Ubuntu 10.04), die folgenden Anweisungen folgen: aio tutorial. Ich kann asynchron lesen und schreiben, aber ich befürchte, dass es ein kleines Speicherleck gibt. Meine Valgrind-Ausgabe besagt, dass es 288 möglicherweise verlorene Bytes und 3.648 noch erreichbare Bytes gibt. Diese Zahlen scheinen unabhängig von der Anzahl der tatsächlich von der Datei gelesenen Bytes zu sein. Ich kann nicht finden, wo oder wie dieses Leck zu beseitigen - und es sieht sogar aus wie ein Problem mit der AIO-Bibliothek. Hat das jemand schon mal gesehen? Die gesamte Valgrind-Ausgabe ist unterhalb. Danke im Voraus.aio.h aio_read() und schreiben Speicherleck
==22330== ==22330== HEAP SUMMARY: ==22330== in use at exit: 3,936 bytes in 3 blocks ==22330== total heap usage: 25 allocs, 22 frees, 15,648 bytes allocated ==22330== ==22330== 64 bytes in 1 blocks are still reachable in loss record 1 of 3 ==22330== at 0x4C274A8: malloc (vg_replace_malloc.c:236) ==22330== by 0x4C27522: realloc (vg_replace_malloc.c:525) ==22330== by 0x504CAF1: __aio_enqueue_request (aio_misc.c:127) ==22330== by 0x504D25A: aio_read (aio_read.c:30) ==22330== by 0x406EB7: baio::read(std::string, char*, long) (baio_unix.cxx:58) ==22330== by 0x40613E: test_read_helper(char*) (test_read.cxx:16) ==22330== by 0x4063E1: test_read() (test_read.cxx:54) ==22330== by 0x40664C: test_read_main(int, char**) (test_read.cxx:74) ==22330== by 0x40959D: testlib_run_test_unit(unsigned long, int, char**) (testlib_main.cxx:116) ==22330== by 0x4097A9: testlib_main(int, char**) (testlib_main.cxx:155) ==22330== by 0x4060B4: main (test_driver.cxx:12) ==22330== ==22330== 288 bytes in 1 blocks are possibly lost in loss record 2 of 3 ==22330== at 0x4C267CC: calloc (vg_replace_malloc.c:467) ==22330== by 0x4: _dl_allocate_tls (dl-tls.c:300) ==22330== by 0x4E34728: [email protected]@GLIBC_2.2.5 (allocatestack.c:561) ==22330== by 0x504C9A8: __aio_enqueue_request (aio_misc.h:60) ==22330== by 0x504D25A: aio_read (aio_read.c:30) ==22330== by 0x406EB7: baio::read(std::string, char*, long) (baio_unix.cxx:58) ==22330== by 0x40613E: test_read_helper(char*) (test_read.cxx:16) ==22330== by 0x4063E1: test_read() (test_read.cxx:54) ==22330== by 0x40664C: test_read_main(int, char**) (test_read.cxx:74) ==22330== by 0x40959D: testlib_run_test_unit(unsigned long, int, char**) (testlib_main.cxx:116) ==22330== by 0x4097A9: testlib_main(int, char**) (testlib_main.cxx:155) ==22330== by 0x4060B4: main (test_driver.cxx:12) ==22330== ==22330== 3,584 bytes in 1 blocks are still reachable in loss record 3 of 3 ==22330== at 0x4C267CC: calloc (vg_replace_malloc.c:467) ==22330== by 0x504CA27: __aio_enqueue_request (aio_misc.c:139) ==22330== by 0x504D25A: aio_read (aio_read.c:30) ==22330== by 0x406EB7: baio::read(std::string, char*, long) (baio_unix.cxx:58) ==22330== by 0x40613E: test_read_helper(char*) (test_read.cxx:16) ==22330== by 0x4063E1: test_read() (test_read.cxx:54) ==22330== by 0x40664C: test_read_main(int, char**) (test_read.cxx:74) ==22330== by 0x40959D: testlib_run_test_unit(unsigned long, int, char**) (testlib_main.cxx:116) ==22330== by 0x4097A9: testlib_main(int, char**) (testlib_main.cxx:155) ==22330== by 0x4060B4: main (test_driver.cxx:12) ==22330== ==22330== LEAK SUMMARY: ==22330== definitely lost: 0 bytes in 0 blocks ==22330== indirectly lost: 0 bytes in 0 blocks ==22330== possibly lost: 288 bytes in 1 blocks ==22330== still reachable: 3,648 bytes in 2 blocks ==22330== suppressed: 0 bytes in 0 blocks
Valgrind enthält eine Liste von Ausnahmen für verschiedene Standardbibliotheksdinge. Ich wette, niemand hat es geschafft, diese Liste für die aio-Bibliothek zu erstellen. – Omnifarious
gut zu wissen - danke für die schnelle antwort. Ich hatte nur Angst, dass ich etwas nicht richtig säubere. – andy
afai kann sehen, dass keine dieser "streunenden" Allocs wahrscheinlich aus Ihrem Code stammen –