矢量模板的编译速度是否比push_back快

Does vector emplace compile faster than push_back?

本文关键字:push back 是否 速度 编译      更新时间:2023-10-16

虽然emplace具有运行时优势,但这个答案表明它也可以加快编译速度。这个家伙同意。

为什么?

由于在运行时和编译期间要比较emplacepush_backconstruction,因此这里有很多问题。让我们先进行汇编。

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

给定两种陈述:

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

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

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

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

将精力集中在正确和健壮的代码上。只需在程序正确、无故障且不会崩溃后才考虑优化。只有当用户说它速度慢、不能满足关键时间事件或不适合内存时才进行优化。想想在考虑这种微优化的时候,你可以写多少代码。