14从汇编的角度深入理解c++_new和malloc有什么关系?
在c中在堆中分配空间,我们使用malloc和free。
而在c++又出现了new和delete,这2个有什么区别呢?
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
int* malcc= (int*)malloc(sizeof(int)*1024);
int* pi = new int(20); //分配1个int空间初始值为20
int *pia = new int[10]; // 10个未初始化int
int *pia2 = new int[10](); // 10个值初始化为0的int
free(malcc);
delete pi;
delete[] pia;
delete[] pia2;
return 0;
}
debug模式下 查看反汇编,追踪调用过程:
查看malloc的调用过程如下:

查看new的调用过程:

因此debug模式下发现:
malloc其实就是:__imp__malloc-----> _nh_malloc_dbg ----> _nh_malloc_dbg_impl --->_heap_alloc_dbg_impl --->_pfnAllocHook
new的调用过程:operator new---->malloc---->_nh_malloc_dbg ----> _nh_malloc_dbg_impl -->……………………
release模式下呢
malloc其实就是:malloc---->__imp__malloc-----> __imp__HeapAlloc@12 (715611F8h)
new的调用过程:new---->operator new---->malloc---->---->__imp__HeapAlloc@12 (715611F8h)

所以如果有人问你malloc和new有啥区别,现在知道了,new和malloc本质是一样的,底层最终都是调用AllocHook或者HeapAlloc是一样的。
当然与malloc成对的free,与new成对的delete也是调用的一样的。


free和delet都是调用HeapFree,当然更底层的就需要进入内核了。


浙公网安备 33010602011771号