Ich studiere, wie C++ die richtigen Elementfunktionen durch Assemblersprache aufruft. Das einfache Programm, das ich mit kommen, ist wie folgt:Was bedeutet es, einen Stern vor ein Register zu setzen?
class A
{
public:
virtual void show() {}
};
class B : public A
{
public:
void show() {}
};
int main()
{
A* pA = new B;
pA->show();
return 0;
}
seiner Montage als die folgende ist:
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
meine Fragen sind:
- ich Google für NWM gesucht, es sagt mir nur, dass C++ es verwendet, um Speicher zuzuweisen, könnte jemand mir mehr darüber erzählen? ist es in einer lib? Wenn möglich, kann ich den Quellcode bekommen? Wie?
- ich bin nicht vertraut mit dieser Syntax, was will es tun?
Ihr Code leckt Speicher, BTW ... jeder neue muss mit einem löschen übereinstimmen ... – Goz
@Goz: Die Chancen stehen, dass Alex das bereits weiß und einfach wollte Erstellen Sie ein [Short, Self Contained, Correct (Compilable), Beispiel] (http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-example-for-programming-questions). –
@Goz, ich denke, dass Martin Liversage schon deine Bedenken beantwortet hat, danke Martin für deine Antwort und danke Goz, dass er es auf mich gerichtet hat. – Alex