class(包括结构变量和动态变量)存储在哪里?

Where is the class (including struct and dynamic variables) stored?

假设我有以下 class:

class message
{
    private:
        HeaderType header;
        // Message text
        byte * text;    

    public:
        message(int ID,struct in_addr senderIP);
        ~message();
        HeaderType getHeader();
        byte * getText();
};

其中 HeaderType 是一个结构,如下所示:

typedef struct {
    int mID;
    struct in_addr mIP;
}HeaderType;

class(包括结构和动态变量)存储在哪里(堆栈、堆...)?

P.S。我将 message m 声明为静态变量。

classes are stored in stack, while structs are allocated in free store

这根本不正确。它们是一回事,只是 struct 成员默认为 public,而 class 成员默认为 private

分配内存的位置完全取决于您实例化对象。

Foo a;             // instantiated on the stack
Foo b* = new Foo;  // on the heap

上面的 Foostruct 还是 class 都没有关系,它们的行为方式相同。

在您的示例中,成员 byte* text; 将与您的 class 一起分配。更明确地说,如果你在栈上实例化一个messagetext将被分配到栈上;如果你在堆上实例化一个messagetext将分配在堆上。

话虽如此,被指向对象的位置不必与指针位于同一位置。例如

int* x;               // This is a pointer declared on the stack

int a = 5;            // This is an int declared on the stack
int* b = new int(5);  // This is an int declared on the heap

x = &a;       // pointing to a stack object
x = b;        // pointing to a heap object
x = nullptr;  // pointing to nothing!

所以你可以看到实际指针的内存和被指向的对象的内存是无关的。事实上,在最后一行中,指针被实例化,但指向 nullptr.

针对您更正的问题:

message 的静态实例将位于数据段。每个非指针成员(包括 HeaderType 的成员)的内存在编译时保留。在程序开始时将调用 messageHeaderType 的构造函数,这将初始化此内存。

如果 message 的构造将为 byte* text 分配内存,则此内存将位于堆中。