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

为何vec![Vec::with_capacity(n)]创建的子向量容量为0?

为什么子Vec的容量是0而非chunk_size?

核心原因

  • Vec克隆不保留预分配容量:Vec::with_capacity(chunk_size)生成的是一个空Vec(长度为0),只是提前分配了chunk_size的内存空间。但Vec的Clone方法仅复制Vec的逻辑内容(即内部元素),预分配的容量属于性能优化细节,不属于克隆语义的一部分——空Vec克隆后会生成一个全新的空Vec,默认容量为0。
  • vec![x; n]的克隆逻辑:这个语法要求元素实现Clone,它会先创建初始元素x,然后通过克隆x来填充剩余的n-1个位置。所以你得到的两个子Vec都是初始空Vec的克隆产物,容量自然都是0。

解决方法

要让每个子Vec都独立预分配指定容量,改用迭代器生成的方式,避免克隆:

#[test]
fn test() {
    let chunk_size = 1024;
    let data: Vec<Vec<u8>> = (0..2).map(|_| Vec::with_capacity(chunk_size)).collect();

    assert_eq!(data[0].capacity(), chunk_size);
    assert_eq!(data[1].capacity(), chunk_size);
}

这种方式会为每个子Vec单独调用Vec::with_capacity,确保各自拥有预分配的chunk_size容量,断言可以正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:42:32