progschj / ThreadPool

A simple C++11 Thread Pool implementation
zlib License
7.63k stars 2.21k forks source link

A problem about memory leak #103

Open For-Elyisa opened 1 year ago

For-Elyisa commented 1 year ago

I write code like this:

struct thv
{
    long l[1024];
};

void thcall(vector<thv> l)
{
    usleep(10 * 1000);
}

int main(int, char **)
{
    ThreadPool thpool(12);
    vector<thv> v;
    vector<future<void>> res;
    for (int i = 0; i < 1000; i++)
    {
        v.push_back(thv());
    }
    for (int i = 0; i < 1000; i++)
    {
        res.push_back(thpool.enqueue(thcall, v));
        usleep(10 * 1000);
    }
    for (auto &it : res)
    {
        it.get();
    }
    vector<thv>().swap(v);
    cout << v.capacity() << endl;
    cout << "----------end----------" << endl;
    std::getchar();
}

when terminal printf

0 ----------end----------

I notice this demo used about 8G memory.

I run this code in ubuntu using ARM cpu and compiled with gcc 9.4.0. what coused this problem? It had serious impacts on my program.

Thanks very much

y11en commented 1 year ago

std::future res = task->get_future(); // will malloc memory to store function return val;

bharsaklemukesh975 commented 1 year ago

Can I work on this if no one is working? Thanks!

Abo-go commented 4 months ago
void thcall(vector<thv> l)

Every time when you call thecall will copy a v.

void thcall(vector<thv>& l)

Use reference instead could help.