最近在研究Dll的CRT初始化过程.
在网上查了些关于CRT初始化堆的资料.
网上的heapinit.c中的_heap_init的代码如下:
而我的VS 2012中的heapinit.c中的_heap_init的代码却更网上的不一样:
请问为什么在VS 2012中.堆的初始化不创建一个新的堆.而是使用进程默认的堆呢?
有没有什么办法使CRT重新创建一个新的堆呢?
我个人认为,如果DLL使用HeapCreate创建的堆的话,如果Dll存在内存泄露.
那么在Dll被卸载时.是不是所泄露的内存会被回收呢?
在网上查了些关于CRT初始化堆的资料.
网上的heapinit.c中的_heap_init的代码如下:
代码:
int __cdecl _heap_init (int mtflag)
{
// Initialize the "big-block" heap first.
if ( (_crtheap = HeapCreate( HEAP_NO_SERIALIZE, BYTES_PER_PAGE, 0 )) == NULL )
return 0;
// Pick a heap, any heap
__active_heap = __heap_select();
return 1;
}
代码:
int __cdecl _heap_init (void)
{
// Initialize the "big-block" heap first.
if ( (_crtheap = GetProcessHeap()) == NULL )
return 0;
return 1;
}
有没有什么办法使CRT重新创建一个新的堆呢?
我个人认为,如果DLL使用HeapCreate创建的堆的话,如果Dll存在内存泄露.
那么在Dll被卸载时.是不是所泄露的内存会被回收呢?