Rocky Linux 8.8:在启动之前执行动态分配时线程中的内存泄漏

Rocky Linux 8.8: memory leak in threads when dynamic allocations are performed before they are launched

提问人:Pacou 提问时间:9/14/2023 更新时间:9/14/2023 访问量:70

问:

在 Rocky Linux 8.8(也是 9.2)中,您是否曾经在启动线程之前执行动态分配时遇到过内存泄漏问题? 请参阅下面的代码

如果在相同的代码(测试,不干净)中,我不进行动态分配或较小的分配,则没有内存泄漏。 使用 top、htop,在一段时间内(20 分钟、1 小时),根据计算机上可用内存的大小,没有观察到内存泄漏,然后内存突然增加,直到达到上限。

请注意,此源不会在 Ubuntu 18.4 上导致内存泄漏。

多谢


#include <iostream>
#include <thread>



bool g_stop = false;


void* func(const int id) {  
    std::cout << "Start of thread " << id << std::endl;

    while(!g_stop)
    {
        std::this_thread::sleep_for(std::chrono::milliseconds(500));
        std::cout << "Wait for thread " << id << std::endl;
    }

    std::cout << "End of thread " << id << std::endl;

    return nullptr;
}

#define MAX_BUFFER_SIZE 65535

int main()
{
    ///////////// Wihtout this dynamic allocation no memory leak
    for(int i = 0; i < 6000; ++i)
    {
        new char[MAX_BUFFER_SIZE];
    }

    for(int i = 0; i < 3; ++i)
    {
        std::thread* pt = new std::thread(func,i+1);
    }

    std::cout<< "Press key to stop threads" << std::endl;

    char c;
    std::cin >> c;

    g_stop = true;

    std::cout<< "Press key to exit"  << std::endl;

    std::cin >> c;

    return 0;
}





使用 top、htop,在一段时间内(20 分钟、1 小时),根据计算机上可用内存的大小,没有观察到内存泄漏,然后内存突然增加,直到达到上限。

Linux 内存泄漏 Rocky-OS

评论


答: 暂无答案