Tôi đang nghiên cứu cách C++ gọi các hàm thành viên phù hợp thông qua ngôn ngữ assembly. Chương trình đơn giản mà tôi đến với là như sau:ý nghĩa của việc đặt một ngôi sao trước khi đăng ký là gì?
class A
{
public:
virtual void show() {}
};
class B : public A
{
public:
void show() {}
};
int main()
{
A* pA = new B;
pA->show();
return 0;
}
lắp ráp của nó là như sau:
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
câu hỏi của tôi là:
- Tôi tìm kiếm google cho nwm, nó chỉ nói với tôi rằng c + + sử dụng nó để cấp phát bộ nhớ, một số có thể cho tôi biết thêm về nó? là nó trong một lib? nếu có thể, tôi có thể lấy mã nguồn của nó không? làm sao?
- tôi không hoàn toàn quen thuộc với cú pháp này, nó muốn làm gì?
mã của bạn bị rò rỉ bộ nhớ, btw ... mỗi mới phải phù hợp với một xóa ... – Goz
@Goz: Rất có thể Alex đã biết điều này và chỉ đơn giản là muốn tạo một [Ngắn, Tự chứa, Sửa (Compilable), Ví dụ] (http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions). –
@Goz, tôi nghĩ rằng Martin Liversage đã trả lời mối quan tâm của bạn, cảm ơn Martin vì câu trả lời của bạn và cảm ơn Goz vì đã chỉ ra cho tôi. – Alex