我想計算一個對象使用的內存的字節數量。鑑於如何計算類對象在C++中使用的內存量?
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>();
}
我不知道足跡(),因爲我聽說,編譯器可能會添加額外的信息只是儲存成員變量,我不知道足跡(),因爲它是指一類對象。這是否也需要一些記憶?
編輯:好的,說形勢發生了變化,使得我們沒有使用一個靜態數組,但實際指針:
#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(這裏稱爲足跡)對?
爲什麼'sizeof(A)'或'sizeof(B)'? – chris
sizeof將把任何變量類型作爲參數。只要sizeof(A)/ sizeof(B) – Aaron
我相當肯定,只會返回sizeof(int)+ sizeof(float *) –