2012-12-10 12 views
8

मैं अगले झंडे के साथ मेरी स्रोत कोड कोडांतरक को संकलित करने के लिए प्रयास किया है:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objectsक्या LTO और के बीच जीसीसी में अंतर है वसा LTO-वस्तुओं

तीसरा एक प्रलेखन में लिखे गए slim एलटीओ कोड को अनुकूलित करता है, लेकिन मुझे पहले और दूसरे के बीच आउटपुट असेंबली फ़ाइल में कोई अंतर नहीं दिखता है, क्यों?

ओएस: लिनक्स
संकलक: जीसीसी 4.7

+0

यह वास्तव में एक ही समय में असेंबलर आउटपुट और -फनो-वेट-एलटीओ-ऑब्जेक्ट्स के लिए पूछने के लिए समझ में नहीं आता है। –

उत्तर

9

वसा और गैर-वसा ऑब्जेक्ट फ़ाइलों के बीच का अंतर यह है कि वसा ऑब्जेक्ट फ़ाइलों में मध्यवर्ती भाषा के साथ-साथ सामान्य रूप से संकलित कोड दोनों होते हैं। लिंकटाइम पर, यदि आप बिना किसी फ्लाइट के कंपाइलर का आह्वान करते हैं, तो वसा ऑब्जेक्ट्स को सामान्य ऑब्जेक्ट फाइलों (और एलटीओ सूचना को छोड़कर) के रूप में संभाला जाएगा, जबकि स्लिम ऑब्जेक्ट्स एलटीओ ऑप्टिमाइज़र को निष्क्रिय कर देगा क्योंकि इसके बिना उन्हें संभालने का कोई तरीका नहीं है।

यदि आप दोनों संकलित और लिंक के साथ लिंक करते हैं, तो दोनों वसा और पतली वस्तुओं को आपको एक ही बाइनरी देना चाहिए, केवल पतली वस्तुएं संकलित करने के लिए छोटे और तेज़ होंगी, क्योंकि आप अनावश्यक कोड पीढ़ी से बचेंगे।

+0

और आजकल - सवाल पूछे जाने पर वापस - स्लिम मोड डिफ़ॉल्ट है, है ना? (बीटीडब्ल्यू मैं एलटीओ के बारे में पढ़ रहा हूं और आपका नाम बहुत कुछ देख रहा हूं :-) –

2

शायद यह किसी के लिए उपयोगी होगा:
Here अगले लिखा है:
The current implementation only produces “fat” objects, effectively doubling compilation time and increasing file sizes up to 5x the original size

तो जैसा कि मुझे लगता है कि यह मुख्य कारण है ।

संबंधित मुद्दे