【发布时间】:2012-01-27 23:03:47
【问题描述】:
有什么方法可以知道物体的动态大小吗?
我的意思是,我有一些对象可以在执行过程中增加它们的大小,我想对其进行监控。
我需要一些像 sizeof() 这样的方法,但它可以与动态对象一起使用,并且它返回该对象的实际内存使用情况..
提前谢谢你,
【问题讨论】:
标签: c++ memory-management heap-memory
有什么方法可以知道物体的动态大小吗?
我的意思是,我有一些对象可以在执行过程中增加它们的大小,我想对其进行监控。
我需要一些像 sizeof() 这样的方法,但它可以与动态对象一起使用,并且它返回该对象的实际内存使用情况..
提前谢谢你,
【问题讨论】:
标签: c++ memory-management heap-memory
该语言没有提供这样的内置功能。
语言提供的结构不需要您知道大小本身,语言的用户也可以从中抽象出来。
万一你仍然需要它,用户必须自己跟踪它。
【讨论】:
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;
}
【讨论】:
就像对象控制自己的逻辑来实现“增加它们的大小”概念一样,它们也必须控制自己的逻辑来实现“返回动态大小”。 C++ 语言本身并不理解您所说的“增加对象大小”是什么意思。
已经发布了明显的示例:std::vector 提供了.size() 方法。它不是作为 C++ 语法的一部分提供的;这是一个运行时函数。
【讨论】: