我正在研究C++如何通過彙編語言調用正確的成員函數。 簡單的程序,我帶着舉例如下:在登記冊前放置一顆星星的含義是什麼?
class A
{
public:
virtual void show() {}
};
class B : public A
{
public:
void show() {}
};
int main()
{
A* pA = new B;
pA->show();
return 0;
}
其組裝是因爲以下幾點:
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
我的問題是:
- 我搜索谷歌爲NWM,它只告訴我,C++使用它來分配內存, 可能有人告訴我更多關於它的內容嗎?它在一個lib中嗎?如果可能,我可以得到它的源代碼嗎?怎麼樣?
- 我對這個語法不太熟悉,它想做什麼?
你的代碼泄漏內存,順便說一句...每一個新的必須與刪除匹配... – Goz
@Goz:Alex有機會已經知道這一點,只是想創建一個[Short,Self Contained,Correct(Compilable),Example](http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions)。 –
@Goz,我認爲Martin Liversage已經回答了您的問題,謝謝Martin的回答,並感謝Goz爲我指出了這一點。 – Alex