簡體   English   中英

如何在運行時確定c ++對象的內存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM