内存泄露的主要原因就是分配内存后,忘记释放。这种情况下,随着程序运行时间的上升,程序占用的内存会不断加大,就会出现内存泄露。
由于历史原因,很多系统为了防止不健壮的程序运行时间过长出现内存泄露,影响系统稳定,通常有所谓的定时重启机制。
解决此问题的根本途径还是开发人员在系统开发时,记得释放已经用完的内存,不管应用成功还是失败,申请内存和释放内存必须成对出现。
TUXEDO应用中,可用tpalloc 和 tpfree 函数类申请和释放内存,也可以用C函数库中的 malloc和free 。
申请和释放须成对出现,有一种特殊情况例外,就是当申请的缓冲区当作返回缓冲区时,不必显示调用tpfree来释放该缓冲区,个人感觉由TUXEDO来对
该缓冲区进行管理。
例如某应用程序代码:
{
char *rcvbuf;
long rcvbuf_len;
char *sndbuf;
long sndbuf_len;
........
rcvbuf = (char *)tpalloc("CARRAY", NULL, 1024L);
sndbuf = (char *)tpalloc("CARRAY", NULL, 1024L);
........
tpcall(testsvr, (char *)snd_buf, sndbuf_len, (char **)&rcvbuf, &rcvbuf_len, 0L);
........
tpfree(sndbuf);
tpreturn(TPSUCCESS, 0, (char *)rcvbuf, (long)rcvbuf_len, 0);
}
该代码中sndbuf释放了,rcvbuf由于当作返回缓冲区,没有进行tpfree.