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

C++ std::vector内存使用机制及实例中24字节占用用途咨询

#include <iostream>
#include <vector>

int main(int argc, char const *argv[])
{
    std::vector<int> a(32768, 0);
    std::cout << "Size " << sizeof a << "\nCapacity " << a.capacity() << "\nElements " << a.size();
    return 0;
}

运行输出结果:

Size 24
Capacity 32768
Elements 32768
24字节vector实例的分配与使用逻辑

你观察到的sizeof(a)=24是std::vector<int>实例本身占用的内存大小,在64位编译环境下,主流STL实现(GNU libstdc++、LLVM libc++等)的vector实例默认在栈上分配,总共包含3个8字节的指针,刚好占用24字节,三个指针的作用分别是:

  • 指向堆内存中元素数组的起始位置:vector存储的所有元素都存放在这个指针指向的堆空间起始地址
  • 指向已构造元素的末尾下一位位置:这个指针和起始指针的差值除以元素类型int的大小(4字节),就是size()方法返回的已存储元素个数
  • 指向堆上申请的整块元素空间的末尾下一位位置:这个指针和起始指针的差值除以int大小,就是capacity()方法返回的当前vector可容纳元素的上限
堆内存占用对应说明

valgrind统计的132096字节堆内存,对应两部分:

  • 元素数组堆空间:32768个int占32768×4=131072字节
  • 剩余字节是系统内存分配器的对齐开销、分配器自身元数据占用,主流实现下24字节是vector栈实例的大小,不属于堆内存占用范畴,仅部分特殊分配器实现会把vector控制块放到堆上,这类场景下24字节才会被计入堆内存统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:09:02