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,当然更底层的就需要进入内核了。

 

posted @ 2023-09-21 18:55  一日学一日功  阅读(39)  评论(0)    收藏  举报