大家好:
直接入主题,情况是这样的,有2个线程通过管道通讯,数据是固定的格式512字节,两端都通过select监听管道,处理流程是这样的:
管道读事件回调--》申请内存,接收--》处理(可能存留很长一段时间)--》发送响应数据包,释放内存
问题:
从管道内读取数据的时候,是先接收到栈上面,然后申请内存在COPY,还是先申请内存在读取,如果内存申请失败该怎么处理?
我现在的处理办法是先申请内存,在接收,如果申请失败直接abort()?
如果是先接收到栈上面,如果申请内存失败,我还可以发送响应包告诉发送端内存申请失败了。因为数据包内带有ID,所以必须要把原数据包接收上来。
一般情况内存是不会申请失败吧,内存不足还玩个屁啊。
就这句:
如果是先接收到栈上面,如果申请内存失败,我还可以发送响应包告诉发送端内存申请失败了。因为数据包内带有ID,所以必须要把原数据包接收上来
既然你前面内存都申请失败了,那你告诉发送方的时候还是要申请一个字节缓存区保存发送的数据,这里又可能申请失败,难搞了吧
######我也是觉得内存申请失败是小概率事件,但是又是很棘手的事件,不检查返回值又不放心。对于这种小概率事件,我就直接打印,然后exit了。######我就关心一点。你的栈不是内存?先放到栈上,如果栈也放不了怎么办?。。
先把发来的数据放栈,栈失败直接返回内存不足,否则从栈中取出数据处理,处理完成释放栈并返回流,不就完了,还要申请内存干嘛,多了一步操作。
######就和接收到一个http请求包一样,里面的数据有部分是需要原封不动的返回给发送端的。 请求也不是接收上来就可以直接处理,然后发送回去的。有一定的生命周期。 我指的栈,就是局部变量或者局部数组。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。