美文网首页
在使用c++ 标准函数库遇到的问题

在使用c++ 标准函数库遇到的问题

作者: 不想当社畜 | 来源:发表于2018-12-23 21:02 被阅读0次

标准函数库的内存释放问题

理解和弄清楚clear()swap()方法的作用.

在程序中使用到了std::vector,std::map这两个基本的容器,但发现不管如何操作,好像都很难释放掉std::map申明的对象.

方法:在linux平台下,通过top命令,观察程序的内存使用情况.由于程序的在运行过程中速度很快,使用std::cin读入命令进行暂时停止操作.

测试如下:

释放vetcor对象

  • 使用swap()方法进行释放内存.
#include<iostream>
#include<vector>

int main(){
    int num1,num2;

    num1 = 10000000;
    
    std::cin>>num2;
 
    std::vector<int> tempvector;
    
    for(int i=0;i<num1;++i){
        tempvector.push_back(i);
    }
    // 观察此时tempvector对象开辟的内存空间和数组大小
    std::cout<<"数组大小: "<<tempvector.size()<<"\n";
    std::cout<<"开辟的空间:  "<<tempvector.capacity()<<"\n\n";

    std::cin>>num2; // 用来间隔作用 使用top命令观察内存消耗

    // 使用clear()方法
    tempvector.clear();
    std::cout<<"数组大小: "<<tempvector.size()<<"\n";
    std::cout<<"开辟的空间:  "<<tempvector.capacity()<<"\n\n";

    std::cin>>num2; // 用来间隔作用 使用top命令观察内存消耗

    // 使用swap()方法
    std::vector<int>().swap(tempvector);

    std::cout<<"数组大小: "<<tempvector.size()<<"\n";
    std::cout<<"开辟的空间:  "<<tempvector.capacity()<<"\n\n";

    std::cin>>num2;

    return 0;
}

输出结果和同时使用top观察内存情况.


#此时内存14012
1
数组大小: 10000000
开辟的空间:  16777216

#此时内存79624
1
数组大小: 0
开辟的空间:  16777216

#此时内存79624
1
数组大小: 0
开辟的空间:  0

#此时内存14084
1
#每个1数字前对应的top命令下观察到的内存情况.

  • 生命周期过后std::vector对象申明的内存将自动释放.

输出结果:

# 内存消耗 14012
1
数组大小: 10000000
开辟的空间:  16777216
# 内存消耗 79624
1
跳出大括号
#内存消耗 79624
1
1

相关文章

网友评论

      本文标题:在使用c++ 标准函数库遇到的问题

      本文链接:https://www.haomeiwen.com/subject/lexokqtx.html