vector 的内存分配问题

本文深入探讨了C++标准模板库中vector容器的内存管理机制。当vector中的元素数量超过其容量时,会触发内存重新分配过程,包括申请新内存、拷贝数据及释放原内存。文章建议预先设置足够的预留空间,通过调用reserve方法来减少内存重新分配的频率,从而提高程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector 的内存分配问题

vector 有一个机制是这样的,如果新加入一个元素,如果size 大于了capacity,那么vector 就会重新找一块更大的地方再把数据放进去,下面进入调试:

在这里插入图片描述
这是原本vector首个元素的地址,这时size 和capacity 都是1,下面新增一个元素让size大于capacity

在这里插入图片描述
可以看到当size 大于capacity 之后内存确实进行重新分配,vector首元素的地址发生了改变,而且原来的值也乱了,为什么呢?下面给出解释:

重新分配的过程:
申请一块新的内存 >>> 拷贝数据 >>> 释放原内存

所以,使用vector容器的时候可以预先空间,把capacity定得够大,这样可以尽量避免重新分配vector 的内存,不增加程序的负担。
例:

int main()
{
    vector <int> A;
    A.reserve(10);
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值