2009-08-30 11 views
34

मैं कई गुणाओं और सूचक अंकगणित को अनुकूलित करने की कोशिश कर रहा हूं और यह देखना चाहता हूं कि जब मैं अनुकूलन झंडे डालता हूं तो संकलक नीचे क्या करता है।मैं सी/सी ++ प्रोग्राम के लिए जीसीसी (किसी भी स्वाद) कंपाइलर द्वारा उत्पन्न असेंबली कोड कैसे देख सकता हूं?

--Edit--

कैसे एक विशेष समारोह या एक कोड ब्लॉक करने के लिए यह प्रतिबंधित करने के लिए?

--Edit_2--

कैसे जीसीसी एक कम वर्बोज़ विधानसभा-कोड उत्पन्न जाने के लिए?

+2

एक कम वर्बोज असेंबली? वास्तव में उससे आपका क्या मतलब है? –

+0

एक असेंबली कोड। दूसरे शब्दों में, मैं सक्रियण रिकॉर्ड्स की प्रारंभिकताओं जैसे विलक्षण चीजों को नहीं चाहता हूं, लेकिन केवल मेरे राज्य के लिए कोड ही स्वीकार्य है। उम्मीद है कि यह स्पष्ट हो जाता है। – vehomzzz

+1

तो क्या आप gcc को _incorrect_ असेंबली कोड जेनरेट करना चाहते हैं, जो केवल सौंदर्य की अपनी संवेदना को संतुष्ट करता है? नहीं साहब। –

उत्तर

35

-S अपनी कमांड लाइन पर स्विच करें।

संपादित करें: यह न भूलें कि यह -o स्विच के तहत निर्दिष्ट फ़ाइलों को असेंबली रखेगा।

+0

आप 'gcc -O3 -march = देशी foo.c -S -o- | '.s' फ़ाइल बनाने के बजाय 'कम' में पाइप को कम करें। यह भी देखें [जीसीसी/क्लैंग असेंबली आउटपुट से "शोर" को कैसे हटाएं?] (Https://stackoverflow.com/questions/38552116/how-to-remove-noise-from-gcc-clang-assembly-output) और अधिक के लिए एएसएम आउटपुट के "दिलचस्प भाग" को देखने के बारे में सुझाव, विशेष रूप से ** मैट गॉडबॉल्ट की सीपीपीकॉन2017 टॉक: ["मेरे कंपाइलर ने मेरे लिए हाल ही में क्या किया है? कंपाइलर के ढक्कन को अनबॉल्टिंग करना "] (https://youtu.be/bSkpMdDe4g4) ** –

9

इसे किसी विशिष्ट फ़ंक्शन या कोड ब्लॉक से कैसे प्रतिबंधित करें?

उस फ़ंक्शन को एक अलग स्रोत फ़ाइल में रखें (और उस स्रोत फ़ाइल के लिए एक अलग कमांड-लाइन पैरामीटर का उपयोग करें)।

+1

यही वह है जो मैं कर रहा हूं। मैं उत्सुक हूं अगर यह सिर्फ विकल्पों से संभव है। – vehomzzz

+0

यह प्रतिबिंबित नहीं हो सकता है कि यह वास्तव में अनुकूलित कैसे किया जाता है यदि यह कॉलर्स में इनलाइन कर सकता है। (विशेष रूप से लिंक-टाइम अनुकूलन के साथ)।एक पैरामीटर भी एक संकलन-समय स्थिर होने से बड़ा अंतर हो सकता है, या ज्ञात सरणी का संरेखण या आकार होने से ऑटो-वेक्टरेशन बहुत बदल सकता है। लेकिन हाँ, यह अच्छा है * अगर * आप समझते हैं कि आप क्या कर रहे हैं। –

2

आप विजुअल स्टूडियो डीबगर में ब्रेकपॉइंट पर प्रोग्राम रोक सकते हैं और "असेंबली दिखा सकते हैं" और एक समय में एक निर्देश के माध्यम से भी कदम उठा सकते हैं।

+3

इस प्रतिक्रिया को वोट क्यों दिया गया था? यह एक पूरी तरह से वैध प्रतिक्रिया है। – aaronsnoswell

+1

@ ऑरन्सनोसवेल मैंने ऐसा नहीं किया, लेकिन संभवतः सवाल स्पष्ट रूप से जीसीसी के बारे में है। – delicateLatticeworkFever

4

आप उस प्रोग्राम को gdb जैसे डीबगर में भी चला सकते हैं और एक डिस्सेप्लर व्यू का उपयोग कर सकते हैं। gdb में आप वर्तमान स्थान पर सी कोड के साथ मिश्रित असेंबली देखने के लिए disass/m आदेश का उपयोग कर सकते हैं।

+0

क्या आप एक न्यूनतम उदाहरण जोड़ सकते हैं? 'disass/m' बस प्रिंट 'कोई फ्रेम चयनित नहीं है।' –

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

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