一个简单的 C 程序可能会在屏幕上打印“hello world”:
#包括< stdio.h > #包含< stdlib.h > int main ( ) { printf ( "你好世界\n " ) ; 返回EXIT_SUCCESS ; }
您可以在 C++ 中编写等价的代码:
#包含< iostream > #包含< stdlib.h > int main ( ) { std :: cout < < "你好世界" < < std :: endl ; 返回EXIT_SUCCESS ; }
这些程序的运行速度有多快?我们可以使用hyperfine之类的基准测试工具进行检查。此类工具处理各种因素,例如 shell 启动时间等。
我不认为在 C++ 中打印“hello world”本身应该更慢或更快,至少不会显着。我们通过运行这些程序来测试的是由于选择编程语言而产生的开销。
在 Linux 下使用标准 C++ 库 (libstdc++) 时,我们可以要求将标准 C++ 与可执行文件链接。结果是一个更大的二进制可执行文件,但它可以提供更快的启动时间。
Hyperfine 告诉我 C 可执行文件的运行速度要快得多:
C | 0.5 毫秒 |
C++(动态) | 1.4 毫秒 |
C++(静态) | 0.7 毫秒 |
我的源代码和 Makefile 可用。我使用 AWS 节点(Graviton 3)在 Ubuntu 22.04 LTS 上获得了这些数字。
可能存在与超精细有关的方法问题。然而,如果这些数字是可信的,那么在 Linux 下,由于 C++ 对小程序执行的影响很大。
一毫秒的开销,如果它确实是正确的,是一个巨大的惩罚。
原文: https://lemire.me/blog/2022/08/09/hello-world-is-slower-in-c-than-in-c-linux/