楼主问的问题感觉对dll的加载方式不是很了解,如果一个dll被一个进程加载了,那么想当于是把dll使用的内存和所有相关都加载到进程中,所以你在dll中new或在进程中new都是在进程的堆中。

解决方案 »

  1.   

    不管在那个模块分配的,都是在你的进程内。
    但是,由于 exe 不知道 dll 是怎么分配出来的,是 new 还是 malloc 之类。
    就算是 new ,也有版本问题,所以不能再 exe 释放。必须有 dll 对应释放。
    这就是哪里分配,哪里释放的问题。跟在什么内存位置分配没有关系。
      

  2.   

    分配的内存在exe进程内,具体是哪个堆则不一定,要看dll里的代码怎么写。dll可以创建私有堆并在私有堆上分配内存(但还是属于exe进程的),也可以在exe的全局堆上分配。