【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介
众所周知vector是可变大小的数组,这个可变是操作系统来决定的,如果空间不足时,通常会成倍的增加其大小,这就会使得很多的空间被浪费。
通常如果我们将一个vector执行clear操作,其仅仅只是将vector中的数据清空,内存并没有被释放,我们通常可以进行以下操作来对vector的内存空间进行释放。
std::vector<int> vec;
//省略操作
for(size_t i = 0; i < vec.size(); ++i){void* ptr = (void*)&vec[i];free(ptr);
}
看起来非常的鸡肋。。。。
C++11中提出了一个新的方法即shrink_to_fit(注意这个方法不仅可以在vector中使用呦~~)
简单来来说,它可以帮助我们提前去释放vector中没有被使用的内存空间,看看下面的例子:
我们可以通过调试单步的运行看看具体的效果是怎么样的。
1、line 75 初始化了一个数组vec,size是100,capacity是100。
2、line 76 我们系统通过resize修改vector的大小为10, 注意这里执行完毕后,size为10,但capacity还是100!!!
3、line 77,我们调用shrink_to_fit方法,可以发现,系统帮助我们释放了多余的内存空间,此时size==capacity==10!
更多信息可以参考:https://cplusplus.com/reference/vector/vector/shrink_to_fit/
【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介相关推荐
- 把图片压缩成指定大小,释放你的内存空间
不知道大家的设备是否也因为储存了太多图片导致内存爆满,时不时就会出现闪屏.卡顿的情况,十分影响我们的使用.有的小伙伴可能会将这些图片上传到云端,但有时会因为忘记了账号或是账号出现异常而丢失图片.其实, ...
- 清理释放安卓手机内存空间方法教程
[size=xx-large]清理释放安卓手机内存空间方法教程 来源: 常扬 Rafer的日志 清理释放安卓手机内存空间方法教程 和PC用户一样智能手机用户也会遇到手机存储不足的问题,对于安卓手机来说 ...
- 一次就能释放大量Mac内存空间的方法,你用过哪种?
清理Mac内存空间对Mac的运行速度有着非常大的好处,所以合理释放Mac内存空间是广大用户常做的一件事.那么小编整理了一些能够一次性大量释放Mac内存空间的方法,大家常用的是哪一种呢?欢迎一起交流哦~ ...
- 如何清理释放 Android 手机内存空间
1.清理大型应用程序的缓存数据 2.删除那些你从来不用或者很少使用的应用程序 3.移动所以可以移动的应用程序数据到SD卡
- vector的内存释放
1. vector容器的内存自增长 与其他容器不同,其内存空间只会增长,不会减小.先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式 ...
- c++ vector的内存释放
c++中vector的一个特点是: 内存空间只会增长,不会减小.即为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都挨着前一个元素存储.设想,如果每次vector添加一个新元素 ...
- Mac内存空间不足如何释放储存空间?深度清理Mac磁盘空间的方法教程
今日coco玛奇朵将分享一些能够释放大量Mac内存空间的方法,以便大家能够优化Mac的运行速度外还能规避由于Mac空间不足而导致安装Ventura时出现的一系列问题. 大家都知道更新Macos都需要预 ...
- c语言的free函数与内存空间释放
目录 0 缘起 1 free() 使用前 - free前程序做了什么 2 free 的作用 - free对内存做了什么 - free对指针做了什么 3 free后怎样做 4 Q&A (1) Q ...
- C语言动态申请内存空间之malloc(),calloc(),realloc()函数
在C语言中用于动态申请内存空间的函数主要为malloc()函数,calloc()函数,以及realloc()函数,以下主要介绍三个函数的用法,区别以及使用时的注意事项. malloc(),calloc ...
- android电视机清理内存,电视机内存空间不足?当贝市场分享如何清理电视机内存详细教程...
智能电视使用时间长了会出现卡顿,闪退,软件无法安装问题,很多网友都不知道该如何解决,本身电视机的内存就有限,不止安装软件会占用内存,使用软件也会出现很多缓存垃圾,今天小编就在这里给大家介绍几种亲测有效 ...
最新文章
- 基于node.js的压缩合并安装
- 第19/24周 锁升级(Lock Escalations)
- poj 2201(RMQ+笛卡尔树)
- ubuntu MySQL Oracle_Oracle 与 MySql 区别
- 双目深度估计中的自监督学习概览
- 初探swift语言的学习笔记九(OC与Swift混编)
- php chmod 777 chown,linux命令中chown与chmod的区别
- Tomcat的三个端口
- JAVA蓝桥杯: 01字串
- Unity渐变色实现
- Centos安装Kafka集群
- IndexedDB封装
- maya制作玻璃材质
- Excel必知必会——count,counta,countif,countifs
- Java设计模式 - 依赖倒转原则
- Meta首份元宇宙白皮书9大看点,瞄准80万亿美元市场
- 理解Eureka的自我保护模式
- 电脑进入bios快捷键是什么|开机按哪个键进BIOS设置
- 科目二上车前的基础说明
- 第35课: 打通Spark系统运行内幕机制循环流程
热门文章
- 收我叫mt3完整源码,不要拿网上的来忽悠,要求前后端完整,文档工具完整,重点可演示编译成功!联系我!
- 神山的方向至诚地祈祷、朝拜
- AutoJs学习-变声器模板
- 【白嫖系列-怕违规】告别BDWP龟速下载,体验飞一般的感觉
- 如何系统学习Android开发?一线互联网内部整理的Android学习路线图是时候拿出来了
- 从零学习Belief Propagation算法(二)
- 港科资讯 | 北京海外高层次人才协会与香港科技大学创业中心合作谅解备忘录签约...
- python微博情感分析,Python情感分析:鹿晗的粉丝们究竟原谅他了吗?
- 视觉slam十四讲——求解相机的位姿
- 【转】SAP 各种记账凭证的更改冲销