-
-
[讨论]关于CRT里的heapinit.c
-
发表于: 2013-12-25 15:50 3179
-
最近在研究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; }
而我的VS 2012中的heapinit.c中的_heap_init的代码却更网上的不一样:
int __cdecl _heap_init (void) { // Initialize the "big-block" heap first. if ( (_crtheap = GetProcessHeap()) == NULL ) return 0; return 1; }
请问为什么在VS 2012中.堆的初始化不创建一个新的堆.而是使用进程默认的堆呢?
有没有什么办法使CRT重新创建一个新的堆呢?
我个人认为,如果DLL使用HeapCreate创建的堆的话,如果Dll存在内存泄露.
那么在Dll被卸载时.是不是所泄露的内存会被回收呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: