您建议我在C中如何缓冲多个流(每个流都需要自己的缓冲区)?
我在脑子里想了个办法:
这是理论上的“伪码”
[ptr, ptr, ptr, ptr ... ]
每个
ptr
都是指向结构的指针:{
stream_id
buff_ptr
}
stream_id
是流的ID(我有这个信息),buff_ptr
是指向一些malloc
ed数据的指针。此外,缓冲器可能必须是灵活的,它不得不调用malloc
和free
使其变得灵活(至少我认为它会)。我基本上可以通过遍历
ptr
s数组来找到所需的缓冲区。那么,那“建筑”是好的,还是有更好的?
如果有人想知道“为什么尼安人需要这个?!“我用Ruby/EventMachine做了一个服务器,协议真的很烂(至少可以这么说),我不知道还能怎么处理。。。除非有办法强迫EventMachine为我缓冲它,否则这将是最好的解决方案,我想。
谢谢。
警察:对不起,狂欢!~
最佳答案
嗯,这似乎是唯一的选择,但你可以改变一些事情:
不要malloc
和free
。使用realloc
代替
遍历列表可能没问题,但是如果有很多缓冲区
你能让调用者给你一个指向缓冲区的指针吗?
你能用散列而不是列表来搜索吗?例如stream_id
provides such a hash
许多api(例如epoll)允许将指针与id(epoll中的描述符)相关联。当这个id发生一些有趣的事情时,API会以4-8字节的内存为代价将指针->零搜索传递给您。
关于c - C中的多缓冲区管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9337112/