class 的成员变量需要更多内存:地址更改?

member variable of a class needs more memory: address changes?

我想我的问题不需要最小的工作示例;这可能很简单,也很容易描述。

假设有一个 class 实例将一些对象存储为成员。现在其中一个成员在运行时增长。创建实例后,member1 消耗了 10 个字节,member2 消耗了 20 个字节。然后 object1 以某种方式被修改,现在需要 15 个字节。

我的问题是member1(的第一个字节)的地址是否不变?或者 member1 的第一个字节现在有可能像以前一样有另一个地址吗? 成员变量是否分配在堆上?

感谢您的反馈!

最佳

Now one of the members grows during runtime.

这种情况在 C++ 中是不可能的。 object 的大小(以及类型的大小)在运行时是常量。

member1 has now another address as before?

没有。 object 的地址在其整个生命周期内永远不会改变。

I have a Class instance whose members are from an external library, I don't even know how they internally store the members.

成员变量的类型必须完整。这意味着类型必须已经定义。如果已定义,则其大小和内部成员都是已知的。您可能通过包含 header 文件来包含类型的定义。您可以阅读 header 以找出定义。

So this is only possible using heap allocation, is it?

不一定。例如,可能有一个 pre-allocated 缓冲区,它可以包含 object 到某个常数限制。

但通常是的,动态 objects 使用动态存储。根据增加内存使用的观察,似乎是这样。