new
运算符从堆中返回一些新分配的内存的地址,以保存一些数据,直到不再需要它为止。
使用GCC,我在进行适当的预处理和编译后立即停止了编译器,这是生成的汇编代码。
编译器生成什么(如果有的话)以便动态请求内存?
由于内存管理是由操作系统处理的,因此必须发生某些平台+ CPU特定的进程;流程何时从平台无关(源代码)过渡到依赖平台(内存管理,可执行文件等)?
C ++
int main()
{
int* x = new int;
}
组装
.file "main.cpp"
.def __main; .scl 2; .type 32; .endef
.text
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
.LFB0:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $48, %rsp
.seh_stackalloc 48
.seh_endprologue
call __main
movl $4, %ecx
call _Znwy
movq %rax, -8(%rbp)
movl $0, %eax
addq $48, %rsp
popq %rbp
ret
.seh_endproc
.ident "GCC: (x86_64-posix-seh-rev1, Built by MinGW-W64 project) 7.2.0"
.def _Znwy; .scl 2; .type 32; .endef