内存保护(急!)

zhangyinxun 2009-02-24 10:03:15
各位大侠,请问如何保护一段内存不能够被释放了??
具体是这样的,假如我们有一个发送数据的函数sendMsg(char *buffer,int size);那么我们通常会在sendMsg中将buffer指向数据拷贝到一段自己的缓存,以防在sendMsg调用完后,buffer指向的数据块被释放!但是如果我们要实现零拷贝,就必须直接用buffer!那么问题就是我们如何在sendMsg中做一个处理,让sendMsg调用完后buffer指向的数据块不能被释放了??
或者各位大侠有没有其他更好的办法实现零拷贝了??!!
急啊!!谢谢!!
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuhy0668 2009-03-13
  • 打赏
  • 举报
回复
sendmsg直接传buffer地址即可
注意要约定好内存是由发送方还是接收方释放,防止内存泄漏
tiedollars 2009-03-11
  • 打赏
  • 举报
回复
sendMsg只把地址传过去
fred_56 2009-03-09
  • 打赏
  • 举报
回复
vxWorks 有一个组件 zbuf 不知道是不是你要的,
不过你要用SendMsg的话,你在Msg里加个字段,指明要不要释放,需要释放的话,由recvMsg的一方负责释放,不知道行不行。
或者做个buffer pool.
adamgame 2009-03-03
  • 打赏
  • 举报
回复
sendMsg直接把缓冲区的地址传过去不就行了,sendMsg是不会释放那你自定义的缓冲区的,且sendMsg在传递信息的时候使用的是自己的数据结构,它只会释放自己的那部分资源。你唯一需要做的就是在发送端做一个BUSY标记给缓冲区,等接收端消费完成后,把BUSY标记RESET就可以再次使用了.
zhangyinxun 2009-02-26
  • 打赏
  • 举报
回复
难道没有达人有办法么?
ies_sweet 2009-02-25
  • 打赏
  • 举报
回复
没有非常理解楼主的问题。
楼主是要实现一个原地工作的sendMsg()接口吗?
如果是实现接口,那么在实现的时候就完全可以自己做。
如果是考虑调用者的安全性,那么还是应当自己copy到局部缓冲上操作,
因为我们无法保证调用者给出的缓冲地址的特性,
否则就必须在接口说明中把限制说清楚。

2,187

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧