我正在實現內存調試日誌機制。的要求如下用於調試日誌記錄的循環緩衝區
- 的緩衝器,用於存儲調試消息是固定的,可以說,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