vector内存分配浅析

STL中vector的内存分配原则是分配为2倍的,为什么是2倍呢,让我们来分析一下。

其实分配内存就是在时间和空间上做一个平衡,如果每次增加的内存很少,那么在空间上浪费的就要少一点,但是时间耗费的要多。如果每次增加的内存很多,那么重新分配的次数就要少一点,时间耗费的也要少一点,但是浪费的空间就要多一点。可能有的人对空间浪费的说法不太清除,我在这里简单说明一下。假设每次增加内存时都以常数c增加,那么你最多浪费c-1个内存空间。假设每次重新分配时以2倍的策略分配,假设某个时刻vector的容量为n,那么当数据增加到n+1时,vector需要重新分配2n的空间,此时你浪费的空间就是n-1,随着分配的次数越多,浪费的空间也就越大。

当vector需要重新分配内存时,它要做以下几步:

(1)首先要分配一个新的内存

(2)把旧内存的数据拷贝到新内存中

(3)销毁旧内存中的数据

(4)释放旧内存

1.首先我们假设每次分配内存都以常数C为增量分配

设我们现在有nc个数据要放到vector中,假设vector初始容量为c,当vector的容量为2c时拷贝了c个数据到新内存中,vector的容量为3c时,要拷贝原来2c个数据到新内存中。依次类推,当vector的容量为nc时,一共拷贝了c+2c+.....+nc。假设拷贝一个数据的时间复杂度为常数,那么vector的容量增加到nc时需要的时间复杂度是O(n^2)。这种方法太耗时了。

 

2.假设我们每次分配都以倍数k来分配,然后我们再看一下情况会是

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值