我正在实现内存调试日志机制。的要求如下用于调试日志记录的循环缓冲区
- 的缓冲器,用于存储调试消息是固定的,可以说,4KB
- 写入缓冲区的调试消息在尺寸上任意的可以是10个字节或2000个字节或更多
- 的一旦缓冲区已满,应该旋转调试消息。
- 调试消息必须按照插入缓冲区的顺序检索。
我正在考虑将这个作为一个单一的链接列表与一个muncher来收集缓冲区,当所有的缓冲区被利用。
你们认为什么?任何指针和建议将非常感激。
0_l_0
我正在实现内存调试日志机制。的要求如下用于调试日志记录的循环缓冲区
我正在考虑将这个作为一个单一的链接列表与一个muncher来收集缓冲区,当所有的缓冲区被利用。
你们认为什么?任何指针和建议将非常感激。
0_l_0
感谢名单大家的答复。这是我已经完成的实施。
对于每一个消息被写入到环形缓冲区,我会进行以下检查
由于头指向最旧的消息,并且我可以通过消息的前缀长度遍历环,因此排序不成问题。
零壹 0_l_0
我正在处理类似的问题/代码,在上面的回顾中,您是在将日志写入临时位置然后获取大小的情况下处理它,或者,当您获取日志时,您已经知道大小? (这种简化问题)。我使用'vsprintf',我知道尺寸的唯一方法是打印一次,然后检查尺寸! – vyom 2013-09-26 12:25:19
我知道函数收到日志消息的大小。我同意,这简化了逻辑。 – 2013-10-02 01:51:03
那是4K的指针或4K的所有文字? – 2013-04-25 23:06:48
你不需要链接列表。该列表会浪费太多内存,特别是如果你有一堆简短的调试消息。您只需要一个指针来跟踪起始点,另一个指针用于跟踪4K循环缓冲区的末端。 – TJD 2013-04-25 23:21:04
然后用长度前缀(如果我理解了你想要的布局)或者单字节(又名'0xFF')记录每个消息的前2个字节并记录消息结束。假设你想辨别出另一条消息,如果这只是一大块旋转文本,则不需要它。 – WhozCraig 2013-04-25 23:24:19