2016-12-08 3 views
0

я взял фрагмент кода из libuv книги https://nikhilm.github.io/uvbook/basics.html и проверили его на наличие утечек памяти со следующим простым кодом:У libuv есть утечки памяти в самом простом примере?

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 
#include <stdio.h> 
#include <uv.h> 


int TestMemLeakage_uv_loop() 
{ 
    uv_loop_t *loop = (uv_loop_t*)malloc(sizeof(uv_loop_t)); 
    uv_loop_init(loop); 

    printf("Now quitting.\n"); 
    uv_run(loop, UV_RUN_DEFAULT); 

    uv_loop_close(loop); 
    free(loop); 
    return 0; 
} 

void main(void) 
{ 
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
    TestMemLeakage_uv_loop(); 
} 

Output в отладочном панели:

Detected memory leaks! 
Dumping objects -> 
{96} normal block at 0x0095B718, 32 bytes long. 
Data: <    > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
Object dump complete. 

Не большой утечки, но это! Пожалуйста, проверьте его. Должен ли я создавать отчет об ошибке?


Обновление. Эта утечка не зависит от количества петель. (Я не тщательно тестировал и не углублялся). Следующий код вызывает ту же утечку памяти:

void main(void) 
{ 
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
    for(int i=0; i<100; ++i) 
     TestMemLeakage_uv_loop(); 
} 

UPD2. Вот сравнение 2 кучей snapshoots до TestMemLeakage_uv_loop() и после. http://image.prntscr.com/image/a42cf8945eaa4cb58a94eaea1e7c099e.png 180 ассигнований было произведено и не освобождено, 1 из них составлено printf.
Я не понимаю, если это нормальная ситуация.

ответ

0

Поскольку эти 32 байта утечки не растут с течением времени и не растут по количеству соединений, петель, ручек и т. Д. Я резюмирую не серьезно и пусть это будет. :-)

1

Можете ли вы проследить, где были выделены ассигнования? libuv может выделять некоторые глобальные структуры (IIRC-то, что связано с threadpool), которые никогда не освобождаются.

В Unix мы используем деструкторы, но ваш детектор утечек тоже их поймает, так как они будут работать после основных возвратов.

+0

У меня не хватило времени для глубокого прослеживания, но поскольку эти 32 байта утечки не растут с течением времени и не растут по количеству подключений, петель, ручек и т. Д. Я резюмирую ** не серьезно и пусть это будет. ** :) – kyb