作者sitos (麥子)
看板C_and_CPP
標題Re: [問題] linklist和forloop處理資料的速度
時間Fri Jun 21 02:34:38 2013
※ 引述《clarkman (涼雨)》之銘言:
: 目前想管理一組編號,可能是0~255,然後想要做到快速處理
: 用C處理
: 現在考慮兩種作法,不太知道怎麼樣才能做到高效率。
: 請問大家有更好的辦法嘛?以及下面兩種我該選擇哪一種?
: 1. 使用linklist,當編號空出來就塞到linklist裡,要用編號就
: 直接取走,移除這個node
: 缺點:一直new和free,還有串連、移除 =>這是目前的架構
: 2. 開一個32byte的陣列,每個bit當成是一個id
: 一次掃一個byte,如果是ff,代表全用掉,往下一個byte掃
: 當發現不是ff,就開始掃bit,掃到後換算成id
: 缺點:怕掃資料花太多時間,最壞的案例應該是id 255,先掃16次byte
: 確認有無用完,然後再掃七次bit確認有沒有空的
3. 在記憶體空間很夠的時候,使用 linklist ,但是不要 new/free 。
一開始先把 256 個 nodes 用 array 開好,然後把它們串起來。
要用編號就從頭取走,然後指到新的頭。有新編號空出來,
就從頭的地方塞進去。
--
活著的目的是為主活 然後為主死
死亡的目的是為主死 然後為主活
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.24.61
推 clarkman:應該沒那麼大的空間可以讓我用@@ 06/21 09:10
→ linotwo:以你的例子一個編號只佔 1 byte 06/21 10:23
→ linotwo:再怎樣也比 linked-list 省 06/21 10:23
嗯,一個 node 應該只需要一個 byte ,這應該已經... 很省了阿 XD
※ 編輯: sitos 來自: 122.116.24.61 (06/21 14:32)
推 clarkman:你的方法好像很不錯耶,用兩個index來處理也可以 06/24 10:15
我隨便心裡面估一下,應該是比原本提到的方法快。
不過當然也很可能有其它好寫又更快的方法。
※ 編輯: sitos 來自: 122.116.24.61 (06/25 02:25)
推 zhouer:方法三看來看去就是用 array implement stack 啊... 06/26 05:27