zoukankan      html  css  js  c++  java
  • vector 内存释放问题

    关于容器的处理,只是拿来用,理解不深,但是今天跑程序出了问题。释放空间未得到真正的释放。于是网上找了一些文章,解决的问题。

    解决方法:使用swap 加上clear,一起释放空间。

    原理:即先创建一个临时拷贝与原先的vector一致,值得注意的是,此时的拷贝(申请空间时系统分配容量)其容量是尽可能小的符合所需数据的。紧接着将该拷贝与原先的vector 进行交换。好了此时,执行交换后,临时变量会被销毁,内存得到释放。此时的v即为原先 的临时拷贝,而交换后的临时拷贝则为容量非常大的vector(不过已经被销毁)。

    用法:例子如下:

     1 #include <iostream>
     2 #include <vector>
     3  
     4 using namespace std;
     5  
     6 vector <string> v;
     7 char ch;
     8  
     9 int main ()
    10 {
    11  
    12     for(int i=0; i<1000000; i++)
    13         v.push_back("abcdefghijklmn");
    14     cin >> ch;
    15     // 此时检查内存情况 占用54M
    16  
    17     v.clear();
    18     cin >> ch;
    19     // 此时再次检查, 仍然占用54M
    20  
    21     cout << "Vector 的 容量为" << v.capacity() << endl;
    22     // 此时容量为 1048576
    23  
    24     vector<string>(v).swap(v);
    25  
    26     cout << "Vector 的 容量为" << v.capacity() << endl;
    27     // 此时容量为0
    28     cin >> ch;
    29     // 检查内存,释放了 10M+ 即为数据内存
    30     return 0;
    31 }
    View Code

    参考链接:http://blog.jobbole.com/37700/

  • 相关阅读:
    CSS3实现的超酷页面过渡效果
    HTML5基本知识小测验
    多线程揭秘
    【框架设计】泛型的应用
    sql server 2005中的except和INTERSECT运算 .
    C#应用MemoryStream提高File读取速度
    .net错误处理机制
    sql 权限导致的问题
    超时时间已到。在操作完成之前超时时间已过或服务器未响应
    SQL差集的使用(EXCEPT)
  • 原文地址:https://www.cnblogs.com/zCoderJoy/p/3860291.html
Copyright © 2011-2022 走看看