按元素复制std :: vector比移动整个向量更优化

问题描述 投票:1回答:1

我正在尝试通过引用将自定义对象的std :: vector传递给构造函数的方法,该构造函数将其复制/移动到另一个私有std :: vector成员,但是以某种方式在for循环中逐个元素地复制它会产生较小的程序尺寸而不是一次移动整个矢量。

通常我的构造函数中有以下代码:

constructor(std::vector<object*>& newVec)
{
  for(int i=0; i<newVec.size(); ++i)
    this->vec.push_back(newVec[i]); 
}

[生成的Linux可执行文件的大小小于使用std :: mo这样的文件:

constructor(std::vector<object*>& newVec)
{
   this->vec=std::move(newVec);
}

仅通过切换这两个代码片段,我从30kB的大小传递到35kB。

PS:向量中包含的对象与构造函数对象不同。

有人可以向我解释为什么前一个版本比后者更优化吗?

c++ c++11 vector stl
1个回答
1
投票

我正在尝试通过引用将自定义对象的std :: vector传递给将其复制/移动到另一个私有std :: vector成员的构造函数,>

在那种情况下,您不应使用左值引用参数。

按值传递,或r值引用。

此外,最好直接初始化成员,而不是默认初始化,然后再移动分配。

有人可以向我解释为什么前一个版本比后者更优化吗?

可能有很多潜在原因:

  • 您可能尚未启用编译器优化。
  • “更优化”是主观的。大多数人关心的是执行时间,而不是可执行文件的大小。因此,可以从不同角度同时优化两个程序。
  • 使用一个功能而不是另一个功能可以增加程序中使用的功能总数。这样做可能会增加可执行文件的大小,这是合理的。
© www.soinside.com 2019 - 2024. All rights reserved.