标准函数库的内存释放问题
理解和弄清楚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
网友评论