2010-06-05 16 views
11

के साथ सी ++ ऑब्जेक्ट का प्रिंट लेआउट g ++ कंपाइलर या किसी अन्य माध्यम का उपयोग कर C++ ऑब्जेक्ट के लेआउट को मुद्रित करने का कोई तरीका है। एक सरल उदाहरण (यह मानते हुए पूर्णांक 4 बाइट लेता है)जी ++ कंपाइलर

class A{ 
    int a; 
}; 

class B:public A{ 
    int b; 
} 

तो उत्पादन होगा

A- 
0  4 
+ a + 

B- 
0  4  8 
+ A.a + b + 

यह वस्तुओं के लेआउट को समझने के लिए (मेरे मामले आभासी मशीन कोड में) उपयोगी होगा।

अग्रिम धन्यवाद।

सादर, जहीर

उत्तर

0

सी ++ आत्मनिरीक्षण नहीं है। एक बार आपका कोड संकलित हो जाने के बाद, typeid और std::type_info के अलावा कक्षाओं के बारे में जानकारी का हर टुकड़ा खो जाता है।

+2

मुझे नहीं लगता कि वह रनटाइम आत्मनिरीक्षण के बारे में बात कर रहा है, लेकिन कुछ कंपाइलर विकल्प के बारे में जो उसे कोड में ऑब्जेक्ट्स के लिए कंपाइलर द्वारा चुने गए मेमोरी लेआउट के बारे में बताने में सक्षम है। –

10

मैन पेज देख रहे हैं, -fdump-class-hierarchy शायद?

2

आपके द्वारा मांगी गई जानकारी को डिबगर्स द्वारा आवश्यक है और जब आप -g के साथ संकलित करते हैं तो उनके लिए उत्सर्जित किया जाता है। (जैसे लिनक्स) ELF/बौना प्लेटफार्मों पर, आप देख सकते हैं क्रियान्वित करते हुए नहीं है:

g++ -g -c foo.cc 
readelf -w foo.o 

अन्य प्लेटफार्मों पर, objdump -g foo.o काम कर सकते हैं।

ईएलएफ/डीडब्ल्यूएआरएफ के लिए, pahole शुरू करने के लिए एक अच्छी जगह की तरह दिखता है।

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