【发布时间】:2015-03-09 18:38:15
【问题描述】:
class C { ... };
std::vector<C> vc;
std::vector<C*> pvc;
std::vector<std::unique_ptr<C>> upvc;
根据 C 的大小,按值存储或按指针存储的方法效率更高。
是否可以大致知道这个大小是多少(在 32 位和 64 位平台上)?
【问题讨论】:
-
对什么有效?这实际上取决于您如何处理这些向量。如果您对性能感兴趣,则必须对其进行衡量。
-
可能还取决于您对容器的操作。我总是按值存储,而不是指针,直到我可以衡量这是不好的。到目前为止,我从来没有发生过。
-
你说的是内存开销吗?您是在谈论向量操作的运行时成本(例如 - 排序)吗?你想最大限度地提高什么样的效率?
-
制作一个模板,在大对象的情况下分配指针或在对象小的情况下不分配指针应该解决这个问题吗?
-
我可以为这个尺寸设定一个明确的下限。对于 POD 类型,您应该至少在 sizeof(POD) > sizeof(POD*) 之前更喜欢该类型的向量。不太明确的是,您应该至少在 sizeof(POD) > 2 * sizeof(POD*) 之前更喜欢这种类型的向量,因为它具有优越的内存局部性和较低的内存使用率(特别是如果您正在动态分配要指向的对象) .
标签: c++ pointers c++11 optimization containers