发表于:2007-03-03 16:56:00
楼主
在OPC服务器里有3种需要分配和管理的内存类型:局部内存、作为“out”参数返回给客户端程序的全局内存和BSTR内存。我们必须正确分配内存和释放内存,需要注意的是:在很多情况下,调用错误的释放某个特定内存块的函数并不产生易见的错误,但是因为没有释放内存而产生内存泄露,随着时间的累加,而最终系统崩溃。
1、 局部内存
局部内存在一个函数内部使用,除此之外,只要指向它们的指针不传递给外部的任务或者DLL也能在一个对象内部分配。这种类型的内存能被分配和释放使用以下2种技术。
Malloc/free:这个在C语言里使用。
New/delete:推荐的方式。如果我们要分配一个数据可以使用new这种方式,一定要记得使用“delete []”语句释放内存。
虽然这两种工作技术都可以工作,但是你不能分配用一种方法分配一块内存块,用另外一种方法释放内存。
2、 全局内存
全局变量是由被调用的方法分配然后以“out”参数的方式传递给调用者(除了BSTR),内存由调用者释放。也有两种技术来管理这种类型。
CoTaskMemAlloc/CoTaskMemFree: 比较容易的方法。
CoGetMalloc:比较有效率的方法。
这两种方法可以交换使用,也就是说用CoTaskMemAlloc分配内存,可以CoGetMalloc来释放内存。
3、 字符内存
字符内存用BSTRs。用SysString…类型的函数分配内存,用SysFreeString释放内存。如果客户端释放从服务器返回的BSTR的内存,一定是使用SysFreeString.