C++ 对象数组如何存储在内存中?

C++ 对象数组如何存储在内存中?,c++,arrays,memory,memory-management,C++,Arrays,Memory,Memory Management,我知道一个连续的内存块被分配给一个数组 我的第一个问题是,当数组元素是对象而不是内置类型时,在为数组保留的连续内存中存储了什么?对象的指针还是对象的实际数据?我猜指针存储在数组中,实际对象随机存储在堆中。我说得对吗 我的第二个问题是,现在我们想为一个对象数组保留一个指定的内存,例如,共享内存。实现这一目标的最佳方式是什么?我是否应该逐个序列化指定内存中的实际对象,并使用相对指针(例如,索引)来访问每个对象?否,除非您有一个指针数组,否则将存储这些对象。一般来说,C++做你所要求的,没有任何自由。

我知道一个连续的内存块被分配给一个数组

我的第一个问题是,当数组元素是对象而不是内置类型时,在为数组保留的连续内存中存储了什么?对象的指针还是对象的实际数据?我猜指针存储在数组中,实际对象随机存储在堆中。我说得对吗


我的第二个问题是,现在我们想为一个对象数组保留一个指定的内存,例如,共享内存。实现这一目标的最佳方式是什么?我是否应该逐个序列化指定内存中的实际对象,并使用相对指针(例如,索引)来访问每个对象?

否,除非您有一个指针数组,否则将存储这些对象。一般来说,C++做你所要求的,没有任何自由。
将对象存储在共享内存中取决于对象的性质,我认为基本上最好还是使用普通数据。

不,除非有指针数组,否则对象是存储的。一般来说,C++做你所要求的,没有任何自由。
将对象存储在共享内存中取决于对象的性质,我认为基本上最好还是使用普通数据。

一点也不正确。数组T[N]包含N个类型为T的元素,直接存储在连续内存中。该数组占用N*sizeofT字节的内存


相反,为了回答您的第二个问题,任何N*sizeofT字节的内存都可以用来保存T类型的N个元素,这可能会受到一些对齐约束。

一点也不正确。数组T[N]包含N个类型为T的元素,直接存储在连续内存中。该数组占用N*sizeofT字节的内存


相反,为了回答您的第二个问题,任何N*sizeofT字节的内存运行都可以用来保存T类型的N个元素,可能会受到一些对齐约束。

不,对象本身是存储的。数组的名称只给您一个指向第一个元素的指针,然后您可以使用指针算法遍历数组。

不,对象本身是存储的。数组的名称只是给你一个指向第一个元素的指针,然后你可以在上面使用指针算法来遍历数组。

我会说我依赖于对象的源代码类型

class an_my_object_a {
    private:
    something_t something;
    something_else_t something_else;
    third_field_t third_field;
    public:
    //there are some methods
}

class an_my_object_b {
    private:
    an_my_object_a * d;
    public:
    //there are some methods
}

_my_object_a的数组可以将其所有数据存储在连续内存中。_my_object_b的数组实际上是指针数组。

我会说我依赖于对象的源代码类型

class an_my_object_a {
    private:
    something_t something;
    something_else_t something_else;
    third_field_t third_field;
    public:
    //there are some methods
}

class an_my_object_b {
    private:
    an_my_object_a * d;
    public:
    //there are some methods
}

_my_object_a的数组可以将其所有数据存储在连续内存中。_my_object_b的数组实际上是一个指针数组。

如果有两个问题,请发表两篇文章。如果有两个问题,请发表两篇文章。如果有的话,那么数组的名称会提供对数组的引用。在某些情况下,这可能会衰减为指向第一个元素的指针。如果有的话,那么数组的名称会提供对数组的引用。在某些情况下,这可能会衰减为指向第一个元素的指针。