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