17

stat()系统调用真的很贵吗?我在某处读到它是一个昂贵的系统调用。真的吗?如果是这样,还有其他选择吗?

4

3 回答 3

19

在典型设置中stat(2)fstat(2)、 和lstat(2)是获取文件信息的唯一合理技术。如果您发现性能问题,那么值得分析您的应用程序并查看会发生什么。

要分析,使用 编译gcc -pg并运行可执行文件gprof(1)

您可能会切换到使用像 Qt 这样的更大的库,但这不太可能处理任何性能问题,而且它们可能stat(2)无论如何都会使用。

因此,无论它是否昂贵,都没有合理的选择。

也就是说,正如吉姆麦克纳马拉的评论一样,正是由于这些原因,它并不昂贵。由于没有其他选择,glibc 和 linux 程序员已使其尽可能高性能。

于 2013-06-17T14:24:00.317 回答
7

您可以随时使用strace您的可执行文件。无需重新编译。此函数允许您获取每个系统调用的实际执行时间。

于 2013-06-17T17:00:32.467 回答
2

问题出现为“昂贵的v / s需要”。

Unix 上的每个进程都以两种模式运行:“用户空间”和“内核空间”,当发出 open()、write()、stat() 等系统调用时,进程从用户空间过渡到内核模式,即昂贵,但前提是我们没有对这个系统调用做任何有意义的事情。就像你使用 stat() 只打印文件的最后访问时间而我们什么都不做,那么我可能应该避免它。

所以首先,调用 stat() 应该有充分的理由。其次,如果您想比较不同代码段的相对执行时间,请使用任何分析工具,它将为您提供准确的统计数据,以证明哪些函数调用是昂贵的,哪些不是。

于 2013-06-17T14:33:12.940 回答