使用对象或指向对象的指针作为类成员和内存分配

2024-03-03

这里也提出了类似的问题:

作为对象的类成员 - 是否是指针? C++ https://stackoverflow.com/questions/3871429/class-members-that-are-objects-pointers-or-not-c

所以我会保持简短。

假设我有一个包含三个 stl 向量的对象。我的想法是否正确,如果他们是班级的正式成员,他们的记忆将是整个对象的“在一起”?例如我的记忆看起来像 10 个块向量 A,5 个块向量 B,然后是 15 个块向量 C。然后,一旦我将更多对象插入向量 A 中,以便空间用完包括向量 B 和 C 的整个结构,则需要将搬家了吗?

那么这是指针的一个论据吗?或者向量内部只是指向分配的内存的指针?同样的问题也会出现在列表等...

关于重定向的成本与复制小对象的成本是否有任何经验法则?也许沿着 5 指针重定向 = 1 整数复制的思路?

Thanks


假设我有一个包含三个 stl 向量的对象。我的想法是否正确,如果他们是班级的正式成员,他们的记忆将是整个对象的“在一起”?例如我的记忆看起来像 10 个块向量 A,5 个块向量 B,然后是 15 个块向量 C。

Each vector在包含对象中占据固定大小,与当前存储的元素数量无关vector。这很可能是value_type of the vector (e.g. vector<int> has value_type int)不会影响所包含的大小vector对象本身:仅存储堆分配的数量vector需要以维持其存储容量(因此它们可能是每个 8 或 16 或 32 字节,但都相同,但不是 10 个“块”(无论是什么)、5 个块和 15 个)。

那么,一旦我向向量 A 中插入更多对象,以致空间用完整个结构(包括向量 B 和 C),是否需要移动?

将元素插入到A只能导致现有元素A移动(超出容量时)。B and C永远不会受到影响。

那么这是指针的一个论据吗?或者向量内部只是指向分配的内存的指针?

是的,这是一场争论......这样一个好争论,是的,vector已经do使用指向实际内存的连续内存的指针value_type元素被存储。

同样的问题也会出现在列表等...

YES, lists 存储他们的value_type堆上的元素太多,以及嵌入或派生的对象的大小list不受操作的影响list.

关于重定向的成本与复制小对象的成本是否有任何经验法则?也许沿着 5 指针重定向 = 1 整数复制的思路?enter code here

C++ 运行在太多平台上,因此没有良好的经验规则。即使在 x86 处理器上,指令集、核心数、缓存大小、CPU 供应商/型号/代等方面的差异也可能是巨大的。如果间接导致内存页面错误,那么它的成本是最高的,并且这非常依赖于机器上程序执行的整体情况。如果您愿意,请对运行该程序的真实计算机进行基准测试,直到找到统计相关且稳定的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用对象或指向对象的指针作为类成员和内存分配 的相关文章

随机推荐