社区
ATL
帖子详情
COM申请与释放内存分别在server和Client端怎么办?
ahphone
2004-06-14 08:37:06
我看到在客户端一次性释放内存的方法,
现在我需要能在客户端能控制内存释放的范围,而不是都释放掉。
有什么办法吗?
不要说在客户端直接CoTaskMemFree(pMem)就可以了
最好解释一下!
...全文
133
6
打赏
收藏
COM申请与释放内存分别在server和Client端怎么办?
我看到在客户端一次性释放内存的方法, 现在我需要能在客户端能控制内存释放的范围,而不是都释放掉。 有什么办法吗? 不要说在客户端直接CoTaskMemFree(pMem)就可以了 最好解释一下!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
天限天空
2004-06-16
打赏
举报
回复
CoTaskMemFree 是 CoGetMalloc 的简化
---------------------------------------------
或则用一个接口专门负责管理内存, 申请的时候想他申请, 释放的时候用个标识释放就行了
快乐鹦鹉
2004-06-15
打赏
举报
回复
不会。Up
wangweixing2000
2004-06-15
打赏
举报
回复
(前提是如果方法掉用中通过任务分配器分配的,但是位于客户地址空间中的),可以用CoTaskMemFree()释放全部或者CoTaskMemRealloc(pMem,cb)释放部分,也可以用IMalloc接口的Free()或者Realloc()来释放,最好用后者因为它可以与Windows NT之前的COM版本保持兼容。
原因是:
eg:
typedef struct tagNODE
{
short value;
[unique] struct tagNODE *pNext;
}NODE;
有一个这样的方法:
idl:
HRESULT GetFromNode([out]NODE* pNode);
调用者不可能预见到将有多少个子元素需要分配。然而,因为被调用方(方法)将为每个节点提供数据,所以他可以安全地为每个节点分配内存。方法实现者必须分配一定的内存初始化内嵌指针,问题就在于从哪里申请内存,才能让调用者知道如何释放这些内存?COM就提供了个任务分配器(COM task allocator)。COM的任务分配器是一个以进程为基础的内存分配器,转门用于为[out]和[in,out]内嵌指针分配内存的。有三个api:void *CoTaskMemAlloc(DWORD cb),void CoTaskMemFree(void *pv);void *CoTaskMemRealloc(void *pv,DWORD cb);//增大或者减少*pv;这三个函数对应于c运行库的malloc,free,realloc函数。不同之处在于他们专门供[out]和[in,out]内嵌指针分配内存。另一个重要的区别是,c运行库的函数不能够用于“在一个模块中分配内存,而在另一个模块中释放它”。因为每个c运行库的实现细节都是私有的,不同的编译器之间可以有所不同。在windows NT之前的com版本中,任务分配器的主要操纵方式是通过接口IMalloc。
ahphone
2004-06-15
打赏
举报
回复
看过你原来的帖子了,看来你很坚持你原来的观点啊。
我又找了一些书,是很有道理的。
我在潘的COM原理与应用上看到关于
CoGetMalloc的介绍,里面的参数dwMemContext的介绍就和MSDN居然不同~
没有所谓的MEMCTX_SHARED
dhbo
2004-06-15
打赏
举报
回复
来向各位大虾学习,如果是一次分配的内存,能够只释放一部分么?
比如 char * pName = new char[9];
怎么能够删除一部分呢?我觉得好像不现实
xenke
2004-06-15
打赏
举报
回复
服务器和客户端的内存是分开的,但是COM运行库使得它们的内存分配像在同一个空间一样.这是分配函数是上面的而已.你在同一个内存空间中可以这么管理内存,在这里也同样管理,只是替换相应内存管理函数而已.
内存
溢出和
内存
泄露、并行和并发、Minor GC和Full GC、
Client
模式和
Server
模式的区别
前言 之前的文章尤其是讲解GC的时候提到了很多的概念,比如
内存
溢出和
内存
泄露、并行与并发、
Client
模式和
Server
模式、Minor GC和Full GC,本文详细讲解下这些概念的区别。
内存
溢出和
内存
泄露的区别 1、
内存
溢出
内存
溢出指的是程序在
申请
内存
的时候,没有足够大的空间可以分配了。 2、
内存
泄露
内存
泄露指的是程序在
申请
内存
之后,没有办法
释放
掉已经
申请
到
内存
,它始终占
【Linux】共享
内存
Linux中共享
内存
的介绍与使用,共享
内存
的
申请
、挂接、解链接、
释放
空间等接口详解,使用
Server
端
与
Client
端
实现两个进程间通信;分析共享
内存
的优势和劣势,使用命名管道使共享
内存
具有访问控制。
unimrcp
client
和
server
简述
一、unimrcp
client
1
client
栈初始化 1.1 创建
client
栈实例 通常情况下,每一个
client
栈都由一个进程创建,默认情况下
client
的配置是从配置文件中加载的,但也可以通过调用 API 来创建和初始化堆栈。配置项的由结构体 apt_dir_layout 指定。 源码: apt_dir_layout_t *dir_layout = apt_defaul...
nginx
内存
无法
释放
?
nginx
内存
无法
释放
? 某次线上排查问题的时候发现一个奇怪的问题,线上nginx 有的worker进程占用
内存
是其它worker 的2倍,并且master进程占用
内存
一定是占用
内存
低worker进程的2倍。 排查过后发现是nginx解析配置时候,会把解析的配置存到一个结构体,当nginx r...
8.《深入理解Java虚拟机》
内存
溢出和
内存
泄露、并行和并发、Minor GC和Full GC、
Client
模式和
Server
模式的区别
内存
溢出和
内存
泄露的区别
内存
溢出:指的是程序在
申请
内存
的时候,没有足够大的空间可以分配了。
内存
泄露:指的是程序在
申请
内存
之后,没有办法
释放
掉已经
申请
到
内存
,它始终占用着
内存
,即被分配的对象可达但无用。
内存
泄露一般都是因为
内存
中有一块很大的对象,但是无法
释放
。 从定义上可以看出,
内存
泄露终将导致
内存
溢出。注意,定位虚拟机问题
内存
问题的时候第一步就是要判断到底是
内存
溢出还是
内存
泄露,前者好判断,跟踪
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章