У меня течет память или нет?

Хорошо, вот основные факты, когда я запускаю свою программу, я смотрю на «Диспетчер задач», она всегда одинакова.

Memory(active private working set)  Memory(private working set)
           1,412K                            1,412k

Это неплохо для 1М при первом запуске, и это стабильные цифры. Теперь мне нужно проверить на утечки памяти, поэтому я выполняю следующее.

        _CrtMemState checkPt1, checkPt2, checkPt3;
        _CrtCheckMemory();
        _CrtMemCheckpoint(&checkPt1);
        ClientSocket = INVALID_SOCKET;
        ClientSocket =  CurrentClass->AcceptIPV4();
        if (ClientSocket != INVALID_SOCKET) {
            thread (SubThread, CurrentClass, ClientSocket).join();
        }
        _CrtCheckMemory();
        _CrtMemCheckpoint(&checkPt2);
        _CrtMemDifference(&checkPt3, &checkPt1, &checkPt2);
        _CrtMemDumpStatistics(&checkPt3);
        _CrtMemDumpAllObjectsSince(&checkPt1);

Теперь это работает ХОРОШО, это не мешает моей нити вообще. Поток выполнить и получить отчет следующим образом.

The thread 0x4470 has exited with code 0 (0x0).
8924 bytes in 22 Free Blocks.
0 bytes in 0 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 8924 bytes.
Dumping objects ->
Object dump complete.

Это ХОРОШАЯ новость. Похоже, каждый выделенный байт освобождается. Теперь приходит проблема, когда я смотрю на «Диспетчер задач», я вижу следующее.

  Memory(active private working set) Memory(private working set)
            1,652K                          1,652k 

Это увеличило все 225 КБ после запуска только этого одного потока. Факт каждый раз, когда этот поток выполняется «Диспетчер задач» показывают увеличение примерно на 225К. Так у меня течет память или нет. У меня есть все строки кода в этом потоке, везде, где я использую malloc, он имеет бесплатное, и везде, где я использую новый, есть удаление, которое идет с ним. Кто-нибудь может указать мне правильное направление?

Всего 1 ответ


Я бы порекомендовал использовать Valgrind для Linux и Dr. Memory для Windows. У VS есть какой-то монитор памяти, но я не слишком изучил его. Доктор Память сработал для меня довольно хорошо, как и Вальгринд.


Есть идеи?

10000