stat()
系统调用真的很贵吗?我在某处读到它是一个昂贵的系统调用。真的吗?如果是这样,还有其他选择吗?
3 回答
在典型设置中stat(2)
,fstat(2)
、 和lstat(2)
是获取文件信息的唯一合理技术。如果您发现性能问题,那么值得分析您的应用程序并查看会发生什么。
要分析,使用 编译gcc -pg
并运行可执行文件gprof(1)
。
您可能会切换到使用像 Qt 这样的更大的库,但这不太可能处理任何性能问题,而且它们可能stat(2)
无论如何都会使用。
因此,无论它是否昂贵,都没有合理的选择。
也就是说,正如吉姆麦克纳马拉的评论一样,正是由于这些原因,它并不昂贵。由于没有其他选择,glibc 和 linux 程序员已使其尽可能高性能。
您可以随时使用strace
您的可执行文件。无需重新编译。此函数允许您获取每个系统调用的实际执行时间。
问题出现为“昂贵的v / s需要”。
Unix 上的每个进程都以两种模式运行:“用户空间”和“内核空间”,当发出 open()、write()、stat() 等系统调用时,进程从用户空间过渡到内核模式,即昂贵,但前提是我们没有对这个系统调用做任何有意义的事情。就像你使用 stat() 只打印文件的最后访问时间而我们什么都不做,那么我可能应该避免它。
所以首先,调用 stat() 应该有充分的理由。其次,如果您想比较不同代码段的相对执行时间,请使用任何分析工具,它将为您提供准确的统计数据,以证明哪些函数调用是昂贵的,哪些不是。