0

这个问题与ANSI C有关。我认为它应该是一个简单的答案......那么这些方法中哪种方法最快?它与我当前的项目没有任何关系,但有一天我突然想到了它,我没有立即在网上看到答案......

4

4 回答 4

10

printf到目前为止,它是可取的,在许多数量级上和在任何意义上。它是一个库函数,是 C 标准的一部分,它可以让您自己的程序打印所需的输出。system另一方面,启动一个新的、独立的进程(需要相当长的时间),您仍然必须希望您的 shell 确实提供了一个echo执行相同操作的命令。

唯一比调用更糟糕systemechosystem调用一个编译器来编译另一个包含printf并运行它的程序,我猜......

不要使用system.

于 2012-07-31T13:31:43.363 回答
4

system生成一个 shell 来执行你的命令。这意味着有一个fork()/exec()来生成shell,而shell又调用另一个fork()/exec()来执行echo。更不用说shell必须搜索PATHfor echo,传递环境变量等。

非常非常慢,比对printf. 除了system可能因为没有 shell 或没有echo.

于 2012-07-31T13:30:45.840 回答
0

在这种情况下,比较可比较的内容会更好......你可以在 system() 中调用类似 printf 的东西,而且不仅处理器参与了速度。

在某些特定情况下,我相信调用 printf 比调用新的小进程慢并非不可能(但它假设拥有一个奇怪的配置处理器与硬盘/内存)。

在同一个过程中,使用 system_call 是写东西的最快方法......(没有缓冲区问题)。

例如,在大多数 unix 系统中,写调用(如果只需要写一个简单的字符串)是最快的方法。

于 2012-07-31T13:46:14.710 回答
0

system可能无法找到命令/程序......或者了解您的代码的人可能会在他/她的路径上echo安装一个恶意程序。echo因此,不仅system速度会慢几个数量级,而且还会带来安全风险。

如果您发现自己处于必须使用 的情况system,您应该始终完全限定您正在调用的命令(例如/bin/echoor /usr/bin/echo)。

但你永远不需要使用它。您可以调用外部程序来做的任何事情......您应该能够找到一个库(或您可以用来构建库的代码),您可以从您的程序中调用它来做同样的事情。这样会更快、更安全。

于 2012-07-31T13:49:42.360 回答