- 论坛徽章:
- 0
|
30可用积分
本帖最后由 toniz 于 2011-09-06 10:06 编辑
- #include <vector>
- #include <deque>
- #include <string>
- #include <iostream>
- using namespace std;
- int main(int argc, char *argv[]){
- string ok;
- int *pp1=new int[20000000];
- memset(pp1,0x00,20000000); //4898 * 4K
- delete [] pp1;
- cerr<<"After create memroy 1, please check the memory"<<endl;
- cin>>ok;
- vector<string > all_results;
- all_results.resize(1000000); //7827 * 4K
- cerr<<"After resize 10000000, please check the memory"<<endl;
- cin>>ok;
- all_results.clear();
- all_results.resize(10);
- int *pp2=new int[20000000];
- memset(pp2,0x00,20000000); //4898 * 4K
- delete [] pp2;
- cerr<<"After create memroy 2, please check the memory"<<endl;
- cin>>ok;
- }
- //12712* 4K
复制代码 上面的代码分三个部分申请内存,我用SVMON 观察,如果是每部都拆开,那么第一步和第三步都是使用4898个4K页面,第二步使用7827个页面。
但如果串起来一起运行的话,最后占用的内存就是12712个页面。
第一步的数组,内存删除后,可以被VECTOR容器使用。 也就是我用SVMON 观察,第一步内存使用4898个页面,第二版用了7827个页面。但VECTOR调用了RESIZE之后页面就一直占用了。
就算我在下面加上 clear 和重新resize ,这部分内存也没被释放。
请大牛指点一下。。谢谢 |
最佳答案
查看完整内容
如果你想手工释放vector里面的动态内存,可以这么做……{ vector temp_; temp.swap( all_results );}……
|