You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::vector构造函数与reserve方法的区别及堆内存分配疑问

两段C++ vector代码的区别与内存分配说明

代码核心区别

  • 元素状态与容量/尺寸:
    • std::vector<uint8_t> vec1(size);:直接创建一个包含size个uint8_t元素的vector,所有元素会被值初始化为0。此时vec1.size()等于size,vec1.capacity()至少为size。
    • std::vector<uint8_t> vec2; vec2.reserve(size);:先创建空vector,再调用reserve(size)预分配能容纳至少size个元素的内存,但不会生成任何元素。此时vec2.size()为0,vec2.capacity()至少为size。
  • 访问与使用差异:
    • vec1可以直接通过下标(如vec1[0])访问任意位置的元素,因为元素已存在。
    • vec2不能直接下标访问(无元素),必须通过push_back、emplace_back等方法添加元素,当元素总数达到size前不会触发额外内存分配。

内存分配情况

两段代码都会在堆上分配内存(默认分配器下):

  • vec1在初始化阶段就从堆上分配足够容纳size个元素的内存,同时完成元素的构造初始化。
  • vec2调用reserve(size)时,会从堆上分配至少能容纳size个元素的内存,但不会构造元素。

内容的提问来源于stack exchange,提问作者mewo1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:17:05