我有个要求。我的进程必须在它的一个代码路径中fork->exec另一个进程。子进程运行一些检查,当某些条件为真时,它必须重新执行自身。当我在高端机器上测试时,它没有引起任何性能问题。
但是,在同一个进程中再次调用execv()是否代价高昂?尤其是当它自己执行时?
注意:第二次没有涉及fork()。该进程将第二次执行exec()本身,以便在其虚拟地址空间中重新映射某些内容。

最佳答案

第二次通话并不比第一次贵。它甚至可能更便宜,因为系统可能不需要从磁盘读取程序映像,也不需要加载任何新的动态库。
另一方面,execv()只需在同一个程序中进行分支就要昂贵得多。我很难想象这样一种情况,在这种情况下,我想编写一个程序来重新执行它自己(不分叉),而不是仅仅调用一个函数。
第三方面,“便宜”和“贵”是相对的。除非你经常这样做,否则你可能不会真正注意到任何差异。

关于c - execv()昂贵吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32785262/

10-11 10:32