2010-02-13 101 views
14

当我使用MSYS编译东西时,./configure步骤可超过make需要更长的时间。但是,Linux中的相同过程具有快速配置和缓慢构建。这只是MSYS中的一些设置让我的系统陷入困境?有没有人有办法解决吗?为什么配置在MSYS中如此之慢?

回答

21

典型configure脚本做一个很多开始小的子进程。在类Unix的操作系统,这与fork()exec()函数调用,它具有需要被保留非常特殊的语义进行(例如,写入时复制分叉后共享内存)。在Windows上,使用CreateProcess()创建子进程,它具有非常不同的语义(例如,与父级完全分开的内存空间)。为了正确执行类Unix脚本和程序,MSYS需要做大量的仿真工作,以便在Windows上创建新的进程,如在Unix上运行fork()/exec()。这最终会比本地提供这些函数调用的操作系统慢。

+2

对于Window上的'CreateProcess'实际上并不是那么糟糕。我认为cygwin试图在windows上模拟fork,这使得它非常慢。如果bash没有使用fork(我猜测它使用了fork,但我没有检查)来启动进程,那么配置会运行得同样快。在我试图解决这个“问题”时,在我的i7盒子上,似乎cygwin每秒只能分叉几次。一种测试fork速度的方法:while(true);做日期;完成| uniq -c – Pavel 2012-08-21 22:07:40

+1

+1 Pavel .. uclinux具有相同的问题,它可以在没有MMU的情况下运行,并且任何fork都使用非常慢的完整副本 – user1496062 2013-10-26 03:14:40

0

您可能还需要关闭所有正在运行的病毒扫描程序。他们将在每次加载时重新扫描可执行文件,这绝对会导致脚本性能下降。

即使你没有反病毒运行后,不要忘了Windows Defender的。 (您可能还需要禁用用户帐户控制,虽然我不知道对程序加载时间产生怎样的影响。)

0

大量的磁盘访问涉及,这恕我直言会减慢速度了很多。 例如,configure会创建临时源代码作为其执行的测试的一部分进行编译。这将创建一个必须再次被删除的对象文件。 我所做的加速配置是提取我想要在RAM驱动器上构建的源代码,并在其中进行配置和编译。 我推荐使用免费的ImDisk(http://www.ltr-data.se/opencode.html/#ImDisk)。

相关问题