我决定在这个论坛上问这个问题,因为我不明白为什么结构分配会在本地函数堆栈上产生额外的 16 字节空间(第二个代码段的第三行)。
这里是c++简单代码及其对应的汇编版本
struct product {
int weight;
} ;
void test() {
product* p;
p=new product();
p->weight=1;
}
push rbp
mov rbp, rsp
sub rsp, 16
mov edi, 4
call operator new(unsigned long)
mov DWORD PTR [rax], 0
mov QWORD PTR [rbp-8], rax
mov rax, QWORD PTR [rbp-8]
mov DWORD PTR [rax], 1
nop
leave
ret