[英]How to determine the memory of a c++ object at runtime
我試圖在運行時確定對象的大小。 sizeof不起作用,因為它在編譯時返回大小。 這是我的意思的一個例子:
class Foo
{
public:
Foo()
{
c = new char[1024*1024*1024];
}
~Foo()
{
delete[] c;
}
private:
char *c;
};
在這種情況下, sizeof(Foo)
將是4個字節而不是〜1GB。 如何在運行時確定Foo的大小? 提前致謝。
你需要以某種方式自己跟蹤它。 例如:
struct Foo
{
Foo()
: elements(1024 * 1024 * 1024)
{
c.reset(new char[elements]);
}
boost::scoped_array<char> c;
int elements;
};
請注意,您應該使用智能指針容器來管理動態分配的對象,這樣您就不必手動管理它們的生命周期。 在這里,我演示了scoped_array
使用,這是一個非常有用的容器。 您還可以使用shared_array
或將shared_ptr
與自定義刪除器一起使用。
Foo的大小是不變的。 ~1GB的字符在技術上並不屬於對象,只是指向它的指針。 字符只被稱為對象擁有,因為對象負責為它們分配和釋放內存。 C ++不提供允許您查明對象分配了多少內存的功能。 你必須自己跟蹤。
對象的大小是系統上的4個字節。 但是,該對象使用其他資源,例如1GB內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.