Я пытаюсь асинхронно читать и записывать на диск на C ++ (используя библиотеку posix aio в Ubuntu 10.04), следуя указаниям, изложенным здесь: руководство по aio. Я могу асинхронно читать и писать, но боюсь, что есть небольшая утечка памяти. В моем выводе valgrind говорится, что 288 байтов, возможно, потеряны, а 3648 все еще доступны. Эти числа кажутся независимыми от количества байтов, фактически прочитанных из файла. Я не могу найти, где и как устранить эту утечку - и даже похоже, что это проблема с библиотекой aio. Кто-нибудь видел это раньше? Полный вывод valgrind приведен ниже. Заранее спасибо.
==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 0x4012395: _dl_allocate_tls (dl-tls.c:300) ==22330== by 0x4E34728: pthread_create@@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