接手项目原有代码,在昨天接到bug提示,一条数据处理时程序崩溃,于是有了这个查找问题的小总结。

gdb调试时问题定位到:malloc(): smallbin double linked list corrupted,然后看了那块儿的代码,并没有发现有问题,于是进入c++冥想时刻:c++是一个神奇的语言,很多崩溃问题出现的地方并不是真实的,就好比一个人后背总疼,贴了膏药拍了片子都没发现问题,后来医生会诊,内科说这是心梗的前兆,问题在于血管堵塞,于是病好了,背不疼了。于是结束冥想,一路向前查找代码,发现很早的一个数据处理的地方有多次的vector扩容,当然这个本身没有问题,这个是vector的一个机制,当空间不够用时,它会进行以下操作:
1、寻找更大空间
2、将原数据复制过去
3、释放原空间
那么,就需要提前reserve,预留空间,提高效率,在这个代码里,原作者同样做了reserve,但是由于数据不规整,就是与原作者的理想状态有点差异,导致了reserve的空间依然不足,就多次进行了另外的扩容,多次的申请空间,释放空间,会产生内存碎片,于是乎,在后面代码中同样进行多次申请与释放的时候,就出现申请的内存不够,失败的问题。
关于vector扩容,使用了一个测试代码:

void FillVector(vector<BigTestStruct>& testVector, int vsize)
{for (int i = 0; i < vsize; i++){BigTestStruct bt;testVector.push_back(bt);cout << testVector.capacity() << endl;}
}

主要就测试扩容规则,在vs和linux中是不太一样的,vs中是1.5倍,Linux下是2倍。

以上,有问题请指正,谢谢!

c++中vector使用的小问题相关推荐

  1. 关于C++中vector和set使用sort方法进行排序

    C++中vector和set都是非常方便的容器, sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序 将sort方法用到vector和set中能实现多种 ...

  2. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template < class _Ty, cla ...

  3. STL中Vector的内存分配机制

    一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用(主要是笔试)及其性能(面试)的分析.今天看了下相关文章,也写了几个小的测试程序跑了跑.算是总结下,希望对需要的 ...

  4. c语言中vector的用法,c中vector的用法

    c中vector的用法的用法你知道吗?下面小编就跟你们详细介绍下c中vector的用法的用法,希望对你们有用. c中vector的用法的用法如下: 1 基本操作 (1)头文件#include. (2) ...

  5. STL中vector、list、deque和map的区别

    vector 向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy( ...

  6. rust熔炉怎么带走_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼

    Rust是一款第一人称生存网络游戏,有点像野外求生,但这款游戏内容则更加丰富.刺激.血腥. 在这款游戏中玩家的第一任务就是活下来,而想要活下来你将要接受饥饿.干渴.寒冷等.游戏中玩家需要建造自己的庇护 ...

  7. mysql中begin end中变量定义_DECLARE只能用于BEGIN…END的开头部分定义局部变量,其作用范围只能在该BEGIN…END中。_学小易找答案...

    [单选题]表达式select ((6%(7-5))+8)*9-2+(5%2) 的运算结果是______. [判断题]所有变量名@var1.@var2等必须以1个"@"开头,可以由当 ...

  8. C++中STL中的大、小、相等概念

    1.STL的大.小.相等概念 STL中关联容器内部的元素是排序的.STL中的许多算法也涉及排序.查找.这些容器和算法都需要对元素进行比较,有的比较是否相等,有的比较元素大小. 在STL中,默认情况下, ...

  9. 直接在PDF文件中改变字体的小技巧

    2019独角兽企业重金招聘Python工程师标准>>> PDF文件大家接触的还是蛮多的,今天要给大家介绍一下直接在PDF文件中改变字体的小技巧,想来应该有蛮多小伙伴需要的. 具体操作 ...

最新文章

  1. MongoDB 索引-9
  2. step1 . day5 C语言基础练习之日历(使用函数调用,优化至元年开始时间)
  3. 工业机器人工具中心点标定的意义_新品发布 | 倍加福新推VOS智能视觉传感器,为机器人添一双“慧眼”...
  4. 【译文】领域模型的五个特征
  5. 重学TCP协议(6) 四次挥手
  6. 图解算法学习笔记(七):狄克斯特拉算法
  7. 【kafka】kafka_2.11-1.1.0 配置 SASL_PLAINTEXT 认证方式
  8. python 单位根检验代码_python时间序列分析
  9. mysql 密码过期解决图例_MYSQL 密码过期解决办法
  10. Python+OpenCv实现摄像头人脸识别
  11. [转载]“有教无类”是孔子的招生口号
  12. Android事件分发机制
  13. 高性能核心板IDO-SOM3908-V1:接口丰富,性能更强,速度更快!
  14. R语言将数值转换为比例
  15. 大三下,我们该做什么?一篇被转万次的日志,你值得一看
  16. linux 有线链接树莓派,linux-通过公共互联网连接到树莓派
  17. Hive的Metastore服务和Hiveserver2服务的详细说明
  18. 卸载nginx 并重新安装
  19. php单例模式的常见应用场景
  20. 学习Oracle的三种境界

热门文章

  1. LeetCode 1089. 复写零
  2. LeetCode 78. 子集(回溯)
  3. ClickHouse入门
  4. android stackview,Android StackView 使用示例
  5. 学PyTorch还是TensorFlow?
  6. 动手做个DialoGPT:生成式多轮对话模型
  7. 丁香园在语义匹配任务上的探索与实践
  8. NLP数据增强方法总结:EDA、BT、MixMatch、UDA
  9. 论文浅尝 | 重新审视语言模型与知识库的关系
  10. 参会邀请 - ISWC2020 | 第十九届国际语义网会议