【问题标题】:Dynamic size of an object [in C++]对象的动态大小 [在 C++ 中]
【发布时间】:2012-01-27 23:03:47
【问题描述】:

有什么方法可以知道物体的动态大小吗?

我的意思是,我有一些对象可以在执行过程中增加它们的大小,我想对其进行监控。

我需要一些像 sizeof() 这样的方法,但它可以与动态对象一起使用,并且它返回该对象的实际内存使用情况..

提前谢谢你,

【问题讨论】:

    标签: c++ memory-management heap-memory


    【解决方案1】:

    该语言没有提供这样的内置功能。 语言提供的结构不需要您知道大小本身,语言的用户也可以从中抽象出来。
    万一你仍然需要它,用户必须自己跟踪它。

    【讨论】:

    • 而且它可能实际上并不存在。有时数据是在不同的对象之间共享的,这到底是谁的数据是不同的
    • @valdo:可能,跟踪它很复杂,但可能,想想对象的大小,而Copy on Write(COW),编译器会适当地处理它。
    【解决方案2】:

    vector 是任何数据类型的动态容器。用法:std::vector <data_type> my_variable;

    例如:vector <int> my_int_Vec; 声明一个 int 向量。

    使用vector::size 了解向量所包含的元素数量。

    使用vector::capacity 了解计算机已为您的向量分配的内存。容量可能大于大小,以适应向量增长。

    #include <vector>
    #include <iostream>
    using namespace std;
    
    int main( )
    {
    
        vector <int> my_int_Vec;
        vector <int>::size_type Size_my_int_Vec, Capacity_my_int_Vec;
    
        my_int_Vec.push_back( 1 );
        Size_my_int_Vec = my_int_Vec.size( );
        Capacity_my_int_Vec = my_int_Vec.capacity( );
    
        cout << "Vector contains " << Size_my_int_Vec  << " elements." << endl;
        cout << "Vector size  is " << Size_my_int_Vec * sizeof(int) << " bytes.\n" << endl;
        cout << "Vector capacity  is " << Capacity_my_int_Vec * sizeof(int) << " bytes.\n" << endl;    
    return 0;
    }
    

    【讨论】:

      【解决方案3】:

      就像对象控制自己的逻辑来实现“增加它们的大小”概念一样,它们也必须控制自己的逻辑来实现“返回动态大小”。 C++ 语言本身并不理解您所说的“增加对象大小”是什么意思。

      已经发布了明显的示例:std::vector 提供了.size() 方法。它不是作为 C++ 语法的一部分提供的;这是一个运行时函数。

      【讨论】:

        猜你喜欢
        • 2014-10-21
        • 1970-01-01
        • 2016-10-05
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 2016-09-10
        • 1970-01-01
        • 2011-10-24
        相关资源
        最近更新 更多