मैं अध्ययन कर रहा हूं कि कैसे सी ++ असेंबली भाषा के माध्यम से सही सदस्य कार्यों का आह्वान करता है। साधारण प्रोग्राम है कि मैं के साथ आते हैं निम्नलिखित है:रजिस्टर से पहले स्टार डालने का क्या अर्थ है?
main:
.LFB2:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
pushq %rbx
subq $24, %rsp
movl $8, %edi
.cfi_offset 3, -24
call _Znwm <<<================ 1
movq %rax, %rbx
movq %rbx, %rax
movq %rax, %rdi
call _ZN1BC1Ev
.L11:
movq %rbx, %rax
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rdx
movq -24(%rbp), %rax
movq %rax, %rdi
call *%rdx <<<=== 2
movl $0, %eax
addq $24, %rsp
popq %rbx
leave
ret
.cfi_endproc
मेरे सवाल कर रहे हैं:
class A
{
public:
virtual void show() {}
};
class B : public A
{
public:
void show() {}
};
int main()
{
A* pA = new B;
pA->show();
return 0;
}
अपने विधानसभा निम्नलिखित के रूप में है
- मैं NWM के लिए गूगल खोज की है, यह केवल मुझे बताता है कि C++ स्मृति आवंटित करने के लिए इसका उपयोग करता है, क्या कोई मुझे इसके बारे में और बता सकता है? क्या यह एक मुक्ति में है? यदि संभव हो, तो क्या मैं इसका स्रोत कोड प्राप्त कर सकता हूं? कैसे?
- मैं इस वाक्यविन्यास से काफी परिचित नहीं हूं, यह क्या करना चाहता है?
पर आपका वर्चुअल फ़ंक्शन है, आपका कोड स्मृति, बीटीडब्ल्यू ... प्रत्येक नए को हटाए जाने के साथ मिलान किया जाना चाहिए ... – Goz
@Goz: संभावना है कि एलेक्स पहले से ही यह जानता है और बस चाहता था एक [लघु, स्वयं युक्त, सही (संकलित), उदाहरण] बनाएं (http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions)। –
@ गोज़, मुझे लगता है कि मार्टिन लिवरेज ने पहले ही आपकी चिंता का उत्तर दिया है, मार्टिन को आपके उत्तर के लिए धन्यवाद और धन्यवाद मेरे लिए इसे इंगित करने के लिए गोज़ धन्यवाद। – Alex