【问题标题】:Does vector emplace compile faster than push_back? [closed]vector emplace 的编译速度是否比 push_back 快? [关闭]
【发布时间】:2016-05-13 04:32:33
【问题描述】:

虽然emplace 具有运行时优势,但this answer 建议它还可以加快编译速度。 This fellow 同意。

为什么会这样?

【问题讨论】:

  • 我非常怀疑是否有人可以对 push_backemplace 的编译速度进行有根据的估计。
  • 那个问题是解析\\5000 more lines like this的代码。我怀疑 5000 行是复合 push_backemplace_back 的解析/编译的更大决定因素。任何不同的 *5000 都是合理的。
  • @IInspectable 同样按照这个逻辑,Herb Sutter 也不可信。
  • @Barry,我认为,这里重要的是业力与帖子的比率,而不是作为成员所花费的时间。而且这两个用户的比例也不是很大。

标签: c++ c++11


【解决方案1】:

这里有很多问题,因为您在运行时和编译期间比较 emplacepush_backconstruction。让我们先编译。

编译涉及将源代码翻译成汇编指令。在发出任何汇编指令之前,通常有两个阶段:词法分析和解析。词法分析是检查语法,解析是检查和处理语义(同样,这非常简化)。

鉴于这两个陈述:

my_vector.push_back(value);
my_vector.emplace(value);

扫描、解析和评估所需的工作应该几乎相同。因此编译时间不应该有任何差异。

另外,以大多数编译器的处理速度而言,如果编译时间存在差异,与启动编译器的时间和执行 I/O 的时间相比可以忽略不计。充其量,我希望节省一毫秒。如果你有超过 1000 个,你可以节省一秒钟的编译时间。人类对编译器完成的反应时间超过 1 秒。因此,节省的费用仍然可以忽略不计或不值得。

就运行时而言,您必须进行概要分析。例如,假设 emplacepush_back 快 1 毫秒。您需要执行 1000 多个 emplace 函数才能获得 1 秒(如果您的程序持续运行且未中断)。您需要执行超过 60000 次才能节省一分钟。等待 I/O 或其他任务完成可能会失去所有这些节省。更有可能的是,您将节省纳秒,而不是毫秒。

将精力集中在正确且健壮的代码上。只有在您的程序正确并且没有错误并且不会崩溃之后才担心优化。仅在用户说它慢、不满足关键时序事件或不适合内存时才进行优化。考虑一下在考虑这种微优化时您可以编写多少代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多