这里也提出了类似的问题:
作为对象的类成员 - 是否是指针? 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, list
s 存储他们的value_type
堆上的元素太多,以及嵌入或派生的对象的大小list
不受操作的影响list
.
关于重定向的成本与复制小对象的成本是否有任何经验法则?也许沿着 5 指针重定向 = 1 整数复制的思路?enter code here
C++ 运行在太多平台上,因此没有良好的经验规则。即使在 x86 处理器上,指令集、核心数、缓存大小、CPU 供应商/型号/代等方面的差异也可能是巨大的。如果间接导致内存页面错误,那么它的成本是最高的,并且这非常依赖于机器上程序执行的整体情况。如果您愿意,请对运行该程序的真实计算机进行基准测试,直到找到统计相关且稳定的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)