malloc
malloc()函数并不是系统调用,而是 C 库里的函数,用于动态分配内存。malloc() 分配的是虚拟内存,而不是物理内存。如果分配后的虚拟内存没有被访问的话,是不会将虚拟内存映射到物理内存,这样就不会占用物理内存了。只有在访问已分配的虚拟地址空间的时候,操作系统通过查找页表,发现虚拟内存对应的页没有在物理内存中,就会触发缺页中断,然后将虚拟内存映射到物理内存中。
new
在C++中,new运算符也不需要进入内核态。new运算符调用相应的 operator new () 函数,动态分配内存,如果 operator new () 不能成功获得内存,则调用new_handler函数。然后调用对象的构造函数,初始化对象,最后返回指向新分配并初始化的内存块的指针。operator_new函数是一个标准库函数,它是一个动态内存分配函数,用于分配指定大小的内存块。内部是通过调用malloc来实现的。然后再分配好动态内存后会执行构造函数。而new_handler是C++中的一个函数指针,指向一个函数,该函数在内存分配失败时被调用。当内存分配失败时,new_handler函数指针指向的函数将被调用,以尝试释放内存并重新分配内存。如果该函数成功分配了内存,则new操作将继续进行。否则,该函数将继续调用,直到成功分配了内存或程序终止。
标签:malloc,函数,内存,new,分配,虚拟内存 From: https://www.cnblogs.com/fireinstone/p/17247614.html