Подозреваемая утечка памяти с _beginthread

Итак, у меня есть некоторые проблемы с подозрением на утечку памяти, для тестирования я написал этот небольшой код. Комментируя следующую строку:

printf("Calc index: %d\n", ArrLength);

код работает хорошо. Но когда я раскомментирую его, программа потерпела крах после нескольких тысяч потоков. Когда я использую try / catch, программа просто рухнула внутри функции try. Кто-нибудь, кто может помочь мне здесь?

#include "stdafx.h"#include <process.h>
#include <iostream>
#include <mutex>

#include <windows.h>

using namespace std;

typedef struct {
int StartNode;
int EndNode;
int GangID;
int MemberID;
int ArrLength;
int arr[10000];
}t;
t *arg;
mutex m;

void myFunc(void *param) {
m.lock();

printf("Calculate thread started\n");
t *args = (t*)param;
int StartNode = args->StartNode;
int EndNode = args->EndNode;
int GangID = args->GangID;
int MemberID = args->MemberID;
int ArrLength = args->ArrLength;
printf("Calc index: %d\n", ArrLength);

free(args);

m.unlock();
}

int main()
{
for (int i = 0; i < 1000000; i++)
{
HANDLE handle;
arg = (t *)malloc(sizeof(t));
arg->StartNode = 2;
arg->EndNode = 1;
arg->GangID = 1;
arg->MemberID = 1;
arg->ArrLength = 5;
for (int j = 0; j < 10000; j++)
{
arg->arr[j] = j;
}
handle = (HANDLE)_beginthread(myFunc, 0, (void*)arg);
}
cin.get();
return 0;
}

0

Решение

Ну, давай сделаем немного калька. Ваш t Структура имеет 40020 байт на экземпляр. Вы выделяете его 1M раз, что в итоге приводит к выделению около 40 Гб. И это не вся необходимая память, потому что каждый поток не бесплатный. По умолчанию Windows выделяет 1 МБ стека на каждый поток, что дает вам 1 ТБ (один терабайт) памяти, необходимой только для того, чтобы потоки работали.

Итак, общий объем памяти составляет около 1040 Гб. Вы действительно намерены это?

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector