什么情况下不适合申请堆内存?
请问高手什么情况下不适合申请堆内存?
比如 在协议实现时,我在一个事件前申请堆内存,但最终由另一个模块释放。
如果协议运行中出问题,那个模块没有释放内存,不就会产生内存泄露吗?这种情况怎么办
[解决办法]
在协议中添加“事务”原语。
[解决办法]
你说的协议是什么协议,能举个例子吗?
协议里面你说的这种情况,我们的处理方法是用mailbox
[解决办法]
可以使用智能指针
[解决办法]
那没有办法(因为我们尽可能的0拷贝)。 只能靠模块与模块间好好配合,考虑多个因数的发生
[解决办法]
mailbox ?ecos里的?
[解决办法]
Trillium和Spatial
[解决办法]
请问高手什么情况下不适合申请堆内存?
比如 在协议实现时,我在一个事件前申请堆内存,但最终由另一个模块释放。
如果协议运行中出问题,那个模块没有释放内存,不就会产生内存泄露吗?这种情况怎么办
==================================================================================
在事件A之前申请了内存,如:
XXXX AEvent->p = malloc(sizeof(XXXX));
传递给事件B之后应该又事件B的某个成员接收并使用:
B->p = (XXXX*)AEvent->p;
(如果B不接收并且不使用,那就不需要传递。就地释放...)
然后再DeleteB或者ReleseB中判断:
if (B->p != NILL) {
free(B->p);
}