这个问题与ANSI C有关。我认为它应该是一个简单的答案......那么这些方法中哪种方法最快?它与我当前的项目没有任何关系,但有一天我突然想到了它,我没有立即在网上看到答案......
4 回答
printf
到目前为止,它是可取的,在许多数量级上和在任何意义上。它是一个库函数,是 C 标准的一部分,它可以让您自己的程序打印所需的输出。system
另一方面,启动一个新的、独立的进程(需要相当长的时间),您仍然必须希望您的 shell 确实提供了一个echo
执行相同操作的命令。
唯一比调用更糟糕system
的echo
是system
调用一个编译器来编译另一个包含printf
并运行它的程序,我猜......
不要使用system
.
system
生成一个 shell 来执行你的命令。这意味着有一个fork()/exec()
来生成shell,而shell又调用另一个fork()/exec()
来执行echo
。更不用说shell
必须搜索PATH
for echo
,传递环境变量等。
非常非常慢,比对printf
. 除了system
可能因为没有 shell 或没有echo
.
在这种情况下,比较可比较的内容会更好......你可以在 system() 中调用类似 printf 的东西,而且不仅处理器参与了速度。
在某些特定情况下,我相信调用 printf 比调用新的小进程慢并非不可能(但它假设拥有一个奇怪的配置处理器与硬盘/内存)。
在同一个过程中,使用 system_call 是写东西的最快方法......(没有缓冲区问题)。
例如,在大多数 unix 系统中,写调用(如果只需要写一个简单的字符串)是最快的方法。
system
可能无法找到命令/程序......或者了解您的代码的人可能会在他/她的路径上echo
安装一个恶意程序。echo
因此,不仅system
速度会慢几个数量级,而且还会带来安全风险。
如果您发现自己处于必须使用 的情况system
,您应该始终完全限定您正在调用的命令(例如/bin/echo
or /usr/bin/echo
)。
但你永远不需要使用它。您可以调用外部程序来做的任何事情......您应该能够找到一个库(或您可以用来构建库的代码),您可以从您的程序中调用它来做同样的事情。这样会更快、更安全。