分叉和动态库交互

时间:2012-03-23 11:41:12

标签: c linux fork ld

我考虑过以下经验:简单的C程序,只返回0,但链接 gcc允许我链接的所有图书馆 - 总共207个。运行这个程序需要很多时间-2.1冷启动,0.24温暖。所以下一步是编写程序,也与之相关联 这堆库,根据请求将fork& exec。想法是,如果它已经加载 库和fork创建进程的完整副本,然后我将运行第一个程序 很快。但我发现没有区别,通过shell或第二个程序运行第一个程序,与所有库链接。 我的错是什么?

编辑:是的,我错过了执行官的观点。但是,加速启动应用程序是否有可能改进我的想法。我知道prelink,但它有点不同的想法。

2 个答案:

答案 0 :(得分:0)

您所做的唯一优势是它将从磁盘读取的所有库都放入文件系统缓存中(与“热启动”相同)。否则,你正在做的就是shell加载一个程序(forkexec)的方式,所以我看不出你对它的期望会更快。如果你只是fork,那么这将“复制”一个过程的想法是正确的,但你也exec

要对文件系统进行“复制”类比,就好像你拿了一个生成起来很慢的文件,复制它,然后rm'然后重新生成它而不是使用副本。

答案 1 :(得分:0)

fork创建进程的精确副本,但exec清除进程内存。因此,必须再次加载所有库(或至少初始化 - 它们的代码段可能是共享的。)