【问题标题】:Move semantics and string performance移动语义和字符串性能
【发布时间】:2013-12-01 01:53:38
【问题描述】:

我在某处读到新标准强制移动语义在字符串类的实现中。例如,现在像 gcc 这样的编译器将字符串实现为写入时复制以提高性能,这使得通过值复制和传递字符串作为参数非常便宜。现在如果复制字符串的移动语义现在是强制性的,那不是性能损失吗?因为如果确实在范围之间传递字符串会很便宜,那么如果/当您复制字符串时,它仍然需要进行复制,对吧?。

谁能帮我澄清一下这个问题?

谢谢。

【问题讨论】:

  • 我想“写时复制”可能会变成“写时移动或复制”。不过,移动字符串非常便宜,我认为任何性能损失都会很小
  • 顺便说一句,C++11 中不再允许 std::string 的 COW 实现。 Gcc 希望能解决这个问题。 Source.

标签: c++


【解决方案1】:

为什么您将移动语义视为性能损失?正确实现后,移动一个字符串相当于只复制几个指针。

嗯,对于原始复制来说,COW 是好的,但对于多线程环境来说它们是不利的,人们正在寻找禁用它的方法。

http://www.gotw.ca/gotw/045.htm

Turning off COW in GCC

Is std::string refcounted in GCC 4.x / C++11?

最后,实际程序中的大多数字符串操作只是将其按原样传递给其他函数,因此const & 足以提高性能。

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多