vector emplace的编译速度是否比push_back快?

时间:2016-05-12 19:45:44

标签: c++ c++11

虽然workers可以带来运行时的好处,this answer表明它也可以加快编译速度。 This fellow同意。

为什么?

1 个答案:

答案 0 :(得分:0)

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

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

鉴于这两个陈述:

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

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

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

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

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