在WIN32中用API GlobalAlloc函数分配的内存可以由多个进程进行共享,但如果分配内存的进程退出了并没有释放这块内存,系统是否会自动释放这块内存?
如果会自动释放,那如果分配内存的进程异常中止的,岂不给所有共享这块内存的进程带来了极大的安全隐患?
但如果不会自动释放,那到最后由谁释放呢?
如果会自动释放,那如果分配内存的进程异常中止的,岂不给所有共享这块内存的进程带来了极大的安全隐患?
但如果不会自动释放,那到最后由谁释放呢?
GlobalFree:函数来释放内存块。您必须传给该函数一个内存句柄。
我刚才专门做了个试验,当分配内存的进程退出了,其它进程仍然可以使用共享的内存.说明内存并没有释放.
那是不是如果一直不调用GlobalFree,是不是此处内存就一直得不到释放吗?
不会的,WINDOWS的内存管理只会负责合理分配、配置内存空间、响应应用请求,如果不释放,肯定要造成全局堆上的死区。
是的,但是注销是否有效果我不知道,我只知道从原理上说会泄露,但通过系统自己,能够在什么节点上,或通过什么手段触发,能够释放从而恢复已申请全局堆内存块,我不知道。如果GlobalHandle的方式不可行,你可以问问主席有什么手段。
至于为什么可以共享,我认为是系统为另外的进程同样创建了一份内存映射,指向相同的物理地址。
当程序关闭时,进程的资源被释放。但是内存空间还被其他程序使用,因此,只是将对应的引用计数-1。在没有进程使用这块内存后,内存被系统释放。