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

如何计算包含嵌套对象的C++对象的总内存大小

计算C对象的总内存占用(含vector内所有B实例)

实现思路

要算出完整的内存占用,得把三部分加起来:

  • C对象自身的大小:直接用sizeof(C)获取
  • vector中所有B实例的总大小:用vector.size() * sizeof(B)计算,因为vector的元素存在堆上,sizeof(vector)只算容器本身的管理结构大小
  • 注意:如果B内部还有动态分配的内存(比如带指针、嵌套容器),那sizeof(B)覆盖不了这部分,不过题目没提这种情况,默认B是无额外动态内存的值类型

示例代码

先给出你无法修改的类定义参考:

#include <vector>

class A {
    int x;
};

class B {
    // 第三方类,无法修改
    char data[10];
};

class C {
public:
    A a;
    std::vector<B> b;
};

然后是你能修改的main函数部分:

#include <iostream>

int main() {
    C c;
    // 往vector里添加几个B对象测试
    c.b.emplace_back();
    c.b.emplace_back();
    c.b.emplace_back();
    
    // 计算总内存
    size_t total_mem = sizeof(c) + c.b.size() * sizeof(B);
    
    // 输出验证
    std::cout << "C对象自身大小: " << sizeof(c) << std::endl;
    std::cout << "vector内B实例总大小: " << c.b.size() * sizeof(B) << std::endl;
    std::cout << "总内存占用: " << total_mem << std::endl;
    
    return 0;
}

关键说明

  • std::vector的sizeof是固定值(64位系统一般是24字节,对应三个指针:指向数据、指向末尾、指向容量上限),和存储的元素数量无关,所以必须单独计算元素的总大小
  • 如果B类内部有隐藏的动态内存(比如包含std::string),那这个方法算出来的结果会偏小,但因为B是第三方类无法修改,除非它提供获取内部内存的接口,否则没有办法准确统计这部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:05