2010-01-26 12 views
15

क्या कोई तरीका — gcc -E — के साथ प्रीप्रोकैसिंग के परिणाम को देखने जैसा है, यह देखने के लिए कि ऑब्जेक्ट फ़ाइलों में संकलित एक बार कैसा दिखता है?संकलित वस्तुओं का लेआउट

मैं जीसीसी के बारे में बात कर रहा हूं, लेकिन एमएसवीसी समेत एक समाधान ठीक होगा।

+2

आप कोड या डेटा का मतलब क्या (वर्ग के नाम के साथ XXX की जगह)? –

+0

अच्छा बिंदु जॉन। कन्स्ट्रक्टर कोड होगा, और सभी कोड वर्ग से संबंधित हैं, व्यक्तिगत वस्तुओं नहीं। इसलिए आपको ऑब्जेक्ट लेआउट में नहीं मिलेगा। – MSalters

+1

'file.s' में असेंबलर आउटपुट प्राप्त करने के लिए आप' g ++ -S file.cpp' का उपयोग कर सकते हैं। क्या ये वही है जो तुम चाहते हो? – msandiford

उत्तर

0

ऑब्जेक्ट फाइलों में द्विआधारी डेटा होता है - एकमात्र उच्च स्तर जो अधिकांश कंपाइलर आउटपुट कर सकते हैं, असेंबलर है, इसलिए यदि आप यह नहीं पढ़ सकते कि आप भाग्य से बाहर हैं। हालांकि, इस क्षेत्र में अधिक जानकारी के लिए this question पर एक नज़र डालें।

0

आप नक्शा फ़ाइलों का उपयोग कर द्विआधारी और उनकी सामग्री के लेआउट का निरीक्षण कर सकते हैं। जीसी के लिए वीसी और -Map या --print-map के लिए /MAP का उपयोग करें।

0

आपका प्रश्न थोड़ा उलझन में है।

यदि आप एमएसवीसी के साथ प्रीप्रोकैसिंग के परिणाम देखना चाहते हैं, तो आप /E, /P/, या /EP का उपयोग कर सकते हैं।

संरचनाओं और कक्षाओं के डेटा लेआउट को दिखाने के लिए एमएसवीसी में एक अनियंत्रित विकल्प है। मुझे अभी यह ढूंढने में परेशानी हो रही है।

+0

> संरचनाओं और कक्षाओं के डेटा लेआउट को दिखाने के लिए एमएसवीसी में एक अनियंत्रित विकल्प है। मुझे अभी यह ढूंढने में परेशानी हो रही है। यह वही है जो मैं ढूंढ रहा हूं! – user257620

+2

मैं अंत में उन स्विच को खोदने में कामयाब रहा: '/ d1reportSingleClassLayoutXXX' और'/d1reportAllClassLayout'। –

5

जीसीसी संकलित निष्पादन योग्य के लिए, चेकआउट Pahole। यह आपको दिखाएगा कि कंपाइलर ने आपके structs/वर्गों को कैसे रखा और चाहे उनके पास "छेद" हो या नहीं। मेमोरी संरेखण नियमों के कारण छेद पैडिंग हैं।

+1

(+1) नाइस टूल –

+1

पैहोल लिंक मर चुका है – ofloveandhate

+0

@ofloveandhate मैंने लिंक तय किया। – paxos1977

0

एक कन्स्ट्रक्टर सिर्फ एक और कार्य है (जब तक कि यह रेखांकित न हो)। ऑब्जेक्ट फ़ाइलों में लिंकर के लिए बहुत सारी जानकारी होती है; इसलिए आपको .a फ़ाइल में फ़ंक्शन ढूंढने में सक्षम होना चाहिए (फ़ंक्शन नाम यद्यपि उलझाए जाएंगे)।

19

विज़ुअल सी के लिए ++:

मैं अंत में (! अच्छी तरह से छिपा हुआ) गैर-दस्तावेजी संकलक झंडे कि MSVC++ here और here से जानकारी का उपयोग करने का समर्थन करता है की खुदाई में कामयाब रहे। यहाँ वे हैं:

/d1reportSingleClassLayoutXXX 
/d1reportAllClassLayout 

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