Linux c++;线程不能重用由main分配的释放内存

Linux c++;线程不能重用由main分配的释放内存,linux,multithreading,c++11,ubuntu-16.04,Linux,Multithreading,C++11,Ubuntu 16.04,我在通过主线程创建新对象,然后删除它时遇到了一个问题,之后我使用相同的函数通过线程再次创建它,发现我的内存(来自htop的监视器)增长了。我在这个代码上是错的还是这是它的行为 void createAndDeleteObj() { std::vector<SomeObj *> objVector; // create object for( size_t i = 0; i < 1000000; ++i ) { objVect

我在通过主线程创建新对象,然后删除它时遇到了一个问题,之后我使用相同的函数通过线程再次创建它,发现我的内存(来自htop的监视器)增长了。我在这个代码上是错的还是这是它的行为

void createAndDeleteObj()
{
    std::vector<SomeObj *> objVector;

    //   create object
    for( size_t i = 0; i < 1000000; ++i )
    {
        objVector.emplace_back( new SomeObj() );
    }

    //   delete object
    for( size_t i = 0; i < 1000000; ++i )
    {
        delete objVector[i];
    }
}

void main()
{

     createAndDeleteObj();

     //  memory not increase
     createAndDeleteObj();

     // memory increase equal to the first time used
     Thread thread1( createAndDeleteObj );

     thread1.join();

     // call this function by thread again, memory not increase 
     Thread thread2( createAndDeleteObj );

     thread2.join();

     //  memory not increase
     createAndDeleteObj();
}
void createAndDeleteObj()
{
std::vector objVector;
//创建对象
对于(大小i=0;i<1000000;++i)
{
objVector.emplace_back(新的SomeObj());
}
//删除对象
对于(大小i=0;i<1000000;++i)
{
删除objVector[i];
}
}
void main()
{
createAndDeleteObj();
//内存没有增加
createAndDeleteObj();
//内存增加等于第一次使用的内存
线程线程1(createAndDeleteObj);
thread1.join();
//再次线程调用此函数,内存不增加
螺纹2(createAndDeleteObj);
螺纹2.连接();
//内存没有增加
createAndDeleteObj();
}

由于线程共享堆空间的概念,我不知道为什么它总是为线程分配新内存,为什么它不使用main分配的内存,即使它被释放。

如何构建程序?您使用的优化标志是什么?你检查过生成的代码了吗?也许有一些优化会影响你的运行性能和内存使用率?@Someprogrammerdude我用g++编译,c++11只有-g标志,没有其他标志。我从未检查过生成的代码,您能告诉我如何检查生成的代码吗?创建线程需要内存。使用,您可以在线查看生成的代码,并查看它如何根据您使用的标志或更改编译器(甚至更改同一编译器的版本)时发生的变化。如何构建程序?您使用的优化标志是什么?你检查过生成的代码了吗?也许有一些优化会影响你的运行性能和内存使用率?@Someprogrammerdude我用g++编译,c++11只有-g标志,没有其他标志。我从未检查过生成的代码,您能告诉我如何检查生成的代码吗?创建线程使用内存。使用,您可以在线查看生成的代码,并查看它如何根据您使用的标志或更改编译器(甚至同一编译器的版本)时发生的变化。