c++ sizeof(vector<x>)为什么是24byte?

1 c++ sizeof(vector)为什么是24byte?

1.1 测试代码:

    vector<int> v;
    cout << v.size() << endl;
    cout << sizeof(v) << endl;
    v.push_back(1);
    cout << v.size() << endl;
    cout << sizeof(v) << endl;
    return 0;


1.2 测试结果:

24

1.3 原因:

  • sizeof(std::vector) 等于 24 的常见原因:标准库实现通常把 std::vector 用三个机器字大小的成员来表示(例如:指向数据的指针、当前 size、capacity 或者三个指针:begin/end/end_of_storage)。在 64 位平台上机器字(指针/size_t)为 8 字节,3 × 8 = 24 字节,所以 sizeof(std::vector) 是 24。
  • 重要说明:sizeof(std::vector) 只计算 vector 对象本身在栈/静态区的大小(即内部指针与计数成员),不包括它在堆上分配的元素内存。元素内存大小约为 v.capacity() * sizeof(T)。
  • 平台与实现依赖:不同编译器/标准库或开启调试模式时,std::vector 可能包含额外调试字段或不同布局(例如 MSVC 在 debug 模式会增大对象),因此大小不是标准指定的、而是实现定义的。
  • 如何估算一个 vector 的总内存占用(粗略):
    1. 对象开销: sizeof(std::vector)
    2. 元素数据: v.capacity() * sizeof(T)
    3. 总近似: sizeof(std::vector) + v.capacity() * sizeof(T)(加上分配器/对齐开销)
  • 建议:若关心内存,使用 v.capacity() 和 sizeof(T) 来估算元素占用;在需要精确测量时用特定平台的内存分析工具或自定义分配器拦截分配。
posted @ 2026-03-07 10:31  退休人生  阅读(19)  评论(0)    收藏  举报