c++ - 类的成员变量需要更多内存:地址变化?
问题描述
我想我的问题不需要最小的工作示例;这可能很简单,也很容易描述。
假设有一个类实例将一些对象存储为成员。现在其中一个成员在运行时增长。创建实例后 member1 消耗了 10 个字节, member2 消耗了 20 个字节。然后 object1 以某种方式修改,现在需要 15 个字节。
我的问题是member1(的第一个字节)的地址是否不变?或者是否有可能 member1 的第一个字节现在有另一个地址?成员变量是在堆上分配的吗?
感谢您的反馈意见!
最好的
解决方案
现在其中一个成员在运行时增长。
这种情况在 C++ 中是不可能的。对象的大小(和类型的大小)在运行时是恒定的。
member1 现在和以前一样有另一个地址?
不会。对象的地址在其整个生命周期内都不会改变。
我有一个 Class 实例,其成员来自外部库,我什至不知道它们如何在内部存储成员。
成员变量的类型必须是完整的。这意味着必须已经定义了类型。如果它被定义,那么它的大小和内部成员都是已知的。您可能通过包含头文件来包含类型的定义。您可以阅读该标题以找出定义。
所以这只能使用堆分配,是吗?
不必要。例如,可能有一个预先分配的缓冲区,它可以包含达到某个恒定限制的对象。
但通常是的,动态对象使用动态存储。根据对内存使用量增加的观察,情况似乎如此。
推荐阅读
- python - Django postgres SplitArrayField 在提交表单时抛出错误
- javascript - redux item reducer的异步函数中的返回语句不改变状态
- nginx - Nginx 允许特定的 ip4 地址
- c++ - 如何设置我的构造函数以使头部和尾部指向一个哨兵?(在 C++ 中的单链表中)
- perl - 如何直接取消引用存储在另一个哈希中的哈希引用?
- asp.net-mvc - 如何在同一个解决方案中使用 Web API?
- oop - 我应该为每个不同的构造函数创建类还是应该只为一个类创建两个构造函数?
- python-3.x - 从具有多个条件的 Pandas 数据帧执行计算
- replace - How to create list of files containing only filename in one set_fact task
- postgresql - 将 JSON.RawMessage 转换为 JSON