2010-02-13 70 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)。

相關問題