2010-12-31 7 views
9

विजुअल स्टूडियो 2010 में, मेरे पास सी/सी ++ स्थिर लाइब्रेरी प्रोजेक्ट है। जब मैं विकल्प को चालू करता हूं मोड रिलीज़ करता है, तो मुझे 90 एमबी से अधिक की एक .lib फ़ाइल प्राप्त होती है! जब मैं इस विकल्प को बंद करता हूं तो आकार घटाकर 24 एमबी कर दिया जाता है। इस पुस्तकालय में प्रोटो-बफर के साथ उत्पन्न सैकड़ों वर्ग शामिल हैं।कुछ स्थैतिक पुस्तकालय में पूरे कार्यक्रम अनुकूलन को चालू करना नाटकीय रूप से लाइब्रेरी आकार बढ़ता है!

मुझे आश्चर्य है कि यह विकल्प आकार क्यों बढ़ाता है? किस स्थितियों में हमें इसे बंद करना होगा?

संपादित करें: एमओ धन्यवाद chrisaycock

+2

"एमओ"? क्या आपका मतलब "एमबी" है? – chrisaycock

+3

MO = मेगा ऑक्टेट, मुझे इसके साथ कोई समस्या नहीं दिख रही है। – Clifford

+0

दिए गए उत्तरों को ध्यान में रखते हुए, पुस्तकालय को निष्पादन योग्य से जोड़ने का प्रयास करें जो कई वर्गों का उपयोग करता है; आप पाएंगे कि लाइब्रेरी फ़ाइल का आकार निष्पादन योग्य के आकार में बहुत कम या कोई फर्क नहीं पड़ता है। पुस्तकालय में लिंक समय पर अनुकूलन की अनुमति देने के लिए जानकारी शामिल है। – Clifford

उत्तर

16

पूरे कार्यक्रम अनुकूलन का मतलब है कि लिंक चरण तक चीजें अनुकूलित नहीं हैं।

एक स्थिर पुस्तकालय का आकार देखने की बात नहीं है। इस मोड में, स्थिर लाइब्रेरी अंतिम अनुकूलन/लिंक चरण के लिए आवश्यक अतिरिक्त जानकारी से भरा हो सकता है। यदि आप पूरे कार्यक्रम अनुकूलन नहीं कर रहे थे तो स्थिर पुस्तकालय के निर्माण के बाद उस जानकारी को फेंक दिया जा सकता था, लेकिन जब आप उस जानकारी को अंत तक रखा जाना चाहिए।

इसके बजाय अंतिम निष्पादन योग्य के आकार को देखें। (यह अभी भी बढ़ सकता है, लेकिन इस तरह की भारी राशि में वृद्धि नहीं होनी चाहिए।)

4

MB में पूरे कार्यक्रम ऑप्टिमाइज़ेशन सक्षम करने पर बदल दिया कार्यान्वयन (* सीपीपी) फ़ाइलों में परिभाषित कार्यों इनलाइन करने के लिए लिंकर की सुविधा देता है। कई स्थानों में एक ही फ़ंक्शन को रेखांकित करने से बाइनरी आकार में काफी वृद्धि हो सकती है।

7

मुझे आश्चर्य है कि यह विकल्प आकार क्यों बढ़ाता है?

क्योंकि आप स्थिर पुस्तकालय बना रहे हैं, निष्पादन योग्य नहीं। पूरे कार्यक्रम अनुकूलनलिंक समय (संकलन समय पर) के बजाय बहुत अनुकूलन छोड़ देता है। इस प्रकार, आपकी लाइब्रेरी में असेंबली कोड की बजाय अप्रचलित "मध्यवर्ती प्रतिनिधित्व" शामिल है।

किस परिस्थितियों में हमें इसे बंद करना होगा?

स्थिर पुस्तकालयों के लिए, जैसा आपने अभी पाया है।

+0

मुझे स्थिर libs के लिए अनुकूलन अक्षम करने का कोई कारण नहीं दिखता है। उनका आकार ज्यादा मायने रखता नहीं है। – Athari

+0

@Athari यह आकार का मुद्दा नहीं है; यह एक संगतता है। Http://blogs.msdn.com/b/vcblog/archive/2009/02/24/quick-tips-on-using-whole-program-optimization.aspx – chrisaycock

+3

में अंतिम पैराग्राफ देखें आलेख स्थिर libs के बारे में बात कर रहा है आप उन लोगों को जहाज का इरादा रखते हैं जो उन्हें एक अलग कंपाइलर संस्करण का उपयोग करके अपनी परियोजनाओं से जोड़ सकते हैं। उस मामले में डब्ल्यूपीओ को बंद करना संगतता कारणों के लिए समझ में आता है, लेकिन यदि libs केवल एक ही कंपाइलर संस्करण के साथ आंतरिक उपयोग के लिए हैं, तो WPO ठीक होना चाहिए और लाभकारी हो सकता है।(यदि यह नहीं था, तो मुझे संदेह है कि विकल्प स्थिर libs के लिए बिल्कुल मौजूद होगा।) –