iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何正确释放Vector的内存
  • 841
分享到

如何正确释放Vector的内存

2023-06-17 09:06:14 841人浏览 八月长安
摘要

这篇文章主要讲解了“如何正确释放Vector的内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何正确释放Vector的内存”吧!今天在看微博的时候, 有人提出了一个对于Vector内存泄

这篇文章主要讲解了“如何正确释放Vector的内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何正确释放Vector的内存”吧!

今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link)。

博主采用 Vector存储一些数据,但是发现在执行 clear() 之后内存并没有释放,于是怀疑产生了内存泄露。随后有人回复:

“vector 的 clear 不影响 capacity , 你应该 swap 一个空的 vector。”

开始并不知道回复者在说什么,于是在谷歌上搜索 vector swap clear 发现已经有类似的问题出现了,并且给出了一些解决方案。

原来这样的问题在 《Effective STL》中的“条款17”已经指出了

当vector、string大量插入数据后,即使删除了大量数据(或者全部都删除,即clear)  并没有改变容器的容量(capacity),所以仍然会占用着内存。 为了避免这种情况,我们应该想办法改变容器的容量使之尽可能小的符合当前  数据所需(shrink to fit)

《Effective STL》给出的解决方案是:

vector<type> v; //.... 这里添加许多元素给v //.... 这里删除v中的许多元素 vector<type>(v).swap(v); //此时v的容量已经尽可能的符合其当前包含的元素数量 //对于string则可能像下面这样 string(s).swap(s);

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

为了证明这一点,我写了一个程序,如下:

#include <iOStream> #include <vector>   using namespace std;   vector <string> v; char ch;   int main () {       for(int i=0; i<1000000; i++)         v.push_back("abcdefghijklmn");     cin >> ch;     // 此时检查内存情况 占用54M       v.clear();     cin >> ch;     // 此时再次检查, 仍然占用54M       cout << "Vector 的 容量为" << v.capacity() << endl;     // 此时容量为 1048576       vector<string>(v).swap(v);       cout << "Vector 的 容量为" << v.capacity() << endl;     // 此时容量为0     cin >> ch;     // 检查内存,释放了 10M+ 即为数据内存     return 0; }

总结

从这个事情说明,自己对STL的了解还非常的不够 平时对vector的清除都懂得采用 clear  方法。

另一方面 对于STL的设计思想也有些了解,在创建一个vector后  vector的实际容量一般会比给数据要大,这样做应该是避免过多的 重新分配内存吧。

当然,上面这种方法虽然释放了内存,但是同时也增加了拷贝数据的时间消耗。  不过一般需要重新调整容量的情况都是 vector本身元素较少的情况,所以 时间消耗可以忽略不计。

因此建议以后大家都将调用 clear() 改为  swap() 吧。

感谢各位的阅读,以上就是“如何正确释放Vector的内存”的内容了,经过本文的学习后,相信大家对如何正确释放Vector的内存这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何正确释放Vector的内存

本文链接: https://www.lsjlt.com/news/287989.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何正确释放Vector的内存
    这篇文章主要讲解了“如何正确释放Vector的内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何正确释放Vector的内存”吧!今天在看微博的时候, 有人提出了一个对于Vector内存泄...
    99+
    2023-06-17
  • C++ 函数异常与资源管理:释放内存的正确姿势
    在 c++++ 中,通过适当的异常处理和资源管理,可以安全有效地释放内存和管理资源:异常处理:try-catch 块用于捕获和处理异常,并释放获取的资源以防止内存泄漏。资源管理:std:...
    99+
    2024-05-03
    c++ 内存管理 异常处理
  • 如何手动释放Python的内存
    在上篇博客中,提到了对一个脚本进行的多次优化。当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑。 在上文的优化中,对每500个用户,会进行一些计算并记录结果在磁盘文件中。原本以为这么做,这些结...
    99+
    2023-01-31
    内存 Python
  • win11系统内存如何释放
    这篇文章主要讲解了“win11系统内存如何释放”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win11系统内存如何释放”吧!win11更新占用多少内存:答:win11系统更新之后大约会占用1...
    99+
    2023-07-01
  • 宝塔建站如何释放内存
    在宝塔面板中释放内存的方法首先,登录宝塔,进入宝塔操作界面;在宝塔界面中,选择“计划任务”选项卡进入;进入添加计划任务界面,任务类型选择“释放内存”;最后,选择任务的执行周期和时间,点击“添加任务”即可;...
    99+
    2024-04-02
  • win11如何清理内存释放空间
    这篇文章将为大家详细讲解有关win11如何清理内存释放空间,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先我们点击桌面下方的开始菜单图标,然后选择设置选项。接着我们在系统里找到存储选项,点击进去。进入存...
    99+
    2023-06-27
  • Linux如何使用命令释放内存
    这篇文章主要讲解了“Linux如何使用命令释放内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux如何使用命令释放内存”吧!  VPS中搭建的WEB服务器,运行的时间长了,内存的使用...
    99+
    2023-06-13
  • 如何在Python中显式释放内存?
    根据Python官方文档,您可以强制垃圾收集器释放未引用的内存gc.collect()。例:   import gc gc.collect()   所属网站分类: python高级 > 综合&其它 作者:lg 链...
    99+
    2023-01-31
    内存 如何在 Python
  • 怎么释放linux的内存
    释放Linux的内存有以下几种方法: 重启系统:重启系统会释放所有占用的内存。 使用sync命令:sync命令会将文件系统缓...
    99+
    2023-10-27
    linux
  • win7如何调虚拟内存最正确
    调整虚拟内存可以帮助提升Windows 7系统的性能,以下是正确的调整方法:1. 打开“控制面板”并选择“系统与安全”。2. 点击“...
    99+
    2023-09-01
    win7
  • Linux系统中如何手动释放内存
    这篇文章给大家分享的是有关Linux系统中如何手动释放内存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux释放内存的命令:sync``echo 1 > /proc/sy...
    99+
    2023-06-27
  • Ubuntu如何释放缓存
    Ubuntu释放缓存的方法打开终端命令行模式。切换到管理员权限。$ sudo su 输入以下命令进行释放缓存。/bin/sync /bin/echo "1" > /proc/sys/vm/drop_caches ...
    99+
    2024-04-02
  • C++ 中内存释放器的作用
    c++++中的内存释放器通过自动释放不再使用的对象来帮助防止内存泄露。释放器提供对象生命周期管理,跟踪对象使用情况并自动释放内存。使用方法包括:创建释放器,利用释放器管理对象,释放器自动...
    99+
    2024-05-02
    c++ 内存释放器
  • 如何提前释放阿里云服务器的内存
    1. 了解内存释放的重要性 在使用阿里云服务器时,及时释放内存是非常重要的。释放内存可以提高服务器的性能和响应速度,确保服务器正常运行。 2. 使用命令行工具释放内存 通过命令行工具可以方便地释放阿里云服务器的内存。以下是一些常用的命令:...
    99+
    2023-10-28
    阿里 内存 服务器
  • c#非托管内存的释放问题如何解决
    这篇“c#非托管内存的释放问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c#非托管内存的释放问题如何解决”文章吧...
    99+
    2023-07-05
  • 如何实现释放CentOS系统内存的Shell脚本
    本篇内容介绍了“如何实现释放CentOS系统内存的Shell脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!脚本内容:代码如下: ...
    99+
    2023-06-09
  • 阿里云数据库如何手动释放内存
    在使用阿里云数据库的过程中,有时候可能会遇到内存不足的情况,这时候就需要手动释放内存。本文将详细介绍如何手动释放阿里云数据库的内存。 一、为什么要手动释放内存在使用数据库的过程中,如果内存不足,数据库的性能会大大降低,甚至可能会出现系统崩...
    99+
    2023-12-18
    阿里 内存 数据库
  • 怎么正确使用Redis的内存
    本篇内容主要讲解“怎么正确使用Redis的内存”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么正确使用Redis的内存”吧!- 思维导图 -查看内存使用情况首...
    99+
    2024-04-02
  • 云服务器的内存怎么释放
    云服务器释放内存的方法:在Linux的首页使用快捷键:“Ctrl+Alt+T”,打开终端。输入命令“free -m”,查询内存使用情况。再输入命令:“sync; echo 3 > /proc/sys/vm/drop_caches”,释...
    99+
    2024-04-02
  • 如何正确使用Python中的函数注释
    本篇内容主要讲解“如何正确使用Python中的函数注释”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何正确使用Python中的函数注释”吧!我在查看python的fixture源码时发现 fi...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作