首页
社区
课程
招聘
[讨论]关于CRT里的heapinit.c
发表于: 2013-12-25 15:50 3179

[讨论]关于CRT里的heapinit.c

bxc 活跃值
6
2013-12-25 15:50
3179
最近在研究Dll的CRT初始化过程.
在网上查了些关于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直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//