我想计算一个对象使用的内存量(以字节为单位)。给定
struct A
{
float data[16];
int index;
};
struct B
{
A a;
};
以下是正确的方法吗?
template <class Type>
size_t footprint();
template <>
size_t footprint<A>()
{
return sizeof(float) * 16 + sizeof(int);
}
template <>
size_t footprint<B>()
{
return footprint<A>();
}
我不确定footprint(),因为我听说编译器可能会添加额外的信息来存储成员变量,我不确定footprint(),因为它引用了一个类对象。这也需要一些内存吗?
编辑:好的,假设情况发生了变化,我们没有使用静态数组而是使用实际指针:
#include <iostream>
using namespace std;
struct A
{
A(int size_)
{
data = new float[size_];
size = size_;
}
~A()
{
delete [] data;
}
float* data;
int size;
};
struct B
{
B() : a(16) {}
A a;
};
size_t footprint(const A& a)
{
return sizeof(float) * a.size + sizeof(int);
}
size_t footprint(const B& b)
{
return footprint(b.a);
}
int main()
{
A a(16);
B b;
cout << "sizeof(A) = " << sizeof(A) << endl;
cout << "sizeof(B) = " << sizeof(B) << endl;
cout << "footprint(a) = " << footprint(a) << endl;
cout << "footprint(b) = " << footprint(b) << endl;
}
在这里,您实际上需要一个特殊的 sizeof 函数(这里称为足迹)对吗?