注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控博客苑-- 孙先生工控博客-- 内存所有权

中国工控网搜索:

孙先生

     学历:硕士研究生
     职称:工程师
     年龄:45岁
       新闻信息(3/0)
       工作图片(0)
       技术论文(0/0)
       交流论坛(0/0)
       留言信箱(0)
       浏览人次:2439
       给我发消息

内存所有权

发表评论(0)    发布时间:2008年8月14日  

    早就想开始写了,但是最近总是网页打不开,这让我十分的郁闷。今天在等待很久之后终于打开了。等的我写作的欲望全无,但也不能白打开一次。贴点对内存操作的东东吧。
   
    在一个分布式环境中(客户端和服务器在不同的进程或计算机上运行),内存管理是一个非常重要的事情。在许多情况下,服务器必须分配系统内存,并把它返回给客户端程序,但是有时候服务器并不知道客户端是什么时候不再需要服务器所分配的内存。自己编写OPC服务器就必须面对这一问题。OPC是基于COM的,COM提供了专门的API并按照一定的规则来处理上述的内存管理问题。
    在编写OPC服务器时就应该利用COM提供的内存操作函数,COM中的IMalloc提供了我们熟悉的C运行时内存函数(malloc和free)的封装。但接口使用起来总不是那么方便,幸运的是COM为我们提供了这个接口的两个辅助函数,使我们可以像使用malloc和free这两个C函数一样。
    下面是一个很简单的辅助内存操作函数
   
    // OpcAlloc
    void* OpcAlloc(size_t tSize)
    {
    return CoTaskMemAlloc(tSize);
    }
   
    //===========================================
   
    // OpcFree
    void OpcFree(void* pBlock)
    {
    if (pBlock != NULL)
    {
    CoTaskMemFree(pBlock);
    }
    }
   
    也可以使用模板实现
    template <typename T>
    T* allocate_buffer( size_t count )
    {
    T* p = (T*)CoTaskMemAlloc( sizeof(T) * count );
    ZeroMemory( p, sizeof(T) * count );
    return p;
    }
    以上两个十分简单的例子已经可以说明CoTaskMemAlloc和CoTaskMemFree的使用。你完全可以当malloc和free一样的使用。
    COM通过IDL描述语言对其跨进程的内存分配和释放问题提供了严格的规则。
    IDL对其描述的方法的参数指定了in和out属性,通过这两个属性或其组合来规范内存的申请和释放的原则。
    1只带in属性的参数,客户端负责分配和释放这些参数的内存。
    2只带out属性的参数,服务器负责分配这些参数的内存而客户端负责释放参数所占用的内存。
    3对于带in/out属性的参数,客户端分配内存并负责释放参数所占用的内存,但是如果需要的话,服务器可以选择重新分配内存。
    HRESULT STDMETHODCALLTYPE GetStatus(
    /* [out] */ OPCSERVERSTATUS **ppServerStatus)
    这种参数为指向指针的指针的out参数在调用时,客户端应负责释放参数所占用的空间。
   
    以后向大家介绍代码时可能大家能更清楚地体会到这2个函数的用法,个人觉得还比较好用,当然你完全可以使用IMalloc(都看个人习惯了),甚至用malloc和free(但是不推荐)。这里只是告诉你我的习惯用法。你要发现有误导大家的东西,请指正,因为我不是神,也没有把所有的东西都精通,只是接触早了一点熟练一点而已。赫赫。
 

暂时没有评论

    发表评论

登陆网站发表评论

用户名:

密码:

注册 | 忘了密码
     相关博客新闻:

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳