我正在实现一个内存调试日志机制。需求如下
- 用于存储调试消息的缓冲区是固定的,比如4KB
- 写入缓冲区的调试消息的大小是任意的,可以是10字节或2000字节或更多
- 一旦缓冲区满了,调试信息应该被旋转。
- 调试信息必须按照插入缓冲区的顺序进行检索。
我正在考虑将其实现为带有咀嚼器的单个链表,以便在使用所有缓冲区时收集缓冲区。
你们觉得怎么样?如有任何指示和建议,我将不胜感激。
0 _l_0
感谢大家的回复。这是我完成的实现。
- 插入到环中的每条消息都将以消息长度作为前缀
- 将有一个头和尾指针,和ring_size。
-
对于要写入环缓冲区的每条消息,我将执行以下检查
- 环缓冲区中是否有空间容纳新消息?
- 消息是否需要移动头部来为新消息插入腾出空间,如果是,通过移动头部来清除最旧的消息,直到我们有足够的空间来插入新消息。现在插入消息和更新尾部。
- 我必须考虑的另一件事是在从缓冲区读取/写入消息时的环绕。例如,当要插入的新消息超出了环边界时,这是一个特殊的写操作,当我们到达缓冲区的末端时,它会绕上一个圈。本质上,使用环绕的消息读/写会导致两次读/写操作。一次写/读直到循环结束,从缓冲区开始再读/写一次。
-
由于头部指向最旧的消息,并且我可以用消息前缀的长度遍历环,因此排序不是问题。
00 _l_0