| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 784 人关注过本帖, 1 人收藏
标题:关于共享内存区的疑问
只看楼主 加入收藏
hjy88168
Rank: 2
等 级:禁止访问
帖 子:37
专家分:13
注 册:2011-10-13
结帖率:53.85%
收藏(1)
 问题点数:0 回复次数:2 
关于共享内存区的疑问
是这样,我明白创建共享内存区,分这四步:

1.CreateFileMapping  //创建共享内存区
2.MapViewOfFile     //映射共享内存区
3、UnmapViewOfFile  //用完之后关闭映射
3.closehandle        //关闭对象句柄

应该是在第二步后靠MapViewOfFile的返回一个指针来操纵那块内存区,这里我都明白

现在呢,我的程序其他部分还有机会访问到这块内存区,按照我之前的理解,我会把上面的四个API做的步骤放到一个初始化函数里用于创建这块共享内存区,但其他函数还会访问这块区域

再用到此共享区的时候我会再用四个API:

1.OpenFileMapping //打开已有的文件映射内核对象
2.MapViewOfFile     //映射共享内存区
3、UnmapViewOfFile  //用完之后关闭映射
3.closehandle        //关闭对象句柄

可以发现后三个API是一样的,所以我怀疑closehandle这个步骤到底是完全是释放了吗?为什么还可以open开呢?
者是第一个疑问
第二个疑问,我想提高程序的效率,在我初始化这块内存区的时候,只做到第三步,也就是UnmapViewOfFile,但不关闭对象即closehandle,那么我下次再用的时候,是不是可以直接从第二个api开始即MapViewOfFile,用完之后也UnmapViewOfFile,但不关闭对象即closehandle
等程序退出前,我closeHandle掉这个对象,不知道可以否??

以上两个问题,请有经验的大神给与解答!谢谢了~
搜索更多相关主题的帖子: 内存 
2013-03-05 10:39
hjy88168
Rank: 2
等 级:禁止访问
帖 子:37
专家分:13
注 册:2011-10-13
收藏
得分:0 
求助!
2013-03-12 13:25
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
CloseHandle这个函数的作用并不是进行释放内存的,内核对象的内存是通过系统自动释放的,这个函数的作用只是减少内核对象的使用计数,当一个内核对象的使用计数变为0的时候,系统检测到这一情况,便会释放该内核对象所占用的内存空间,如果我们只是一味的打开,而不去CloseHandle的话,那么这个内核对象的使用计数便会不断增加1,永远不可能是0嘛,只有当程序退出时才会去释放的!

[ 本帖最后由 我菜119 于 2013-3-12 15:30 编辑 ]

愿用余生致力编程
2013-03-12 15:29
快速回复:关于共享内存区的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021171 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved