看板 Programming 關於我們 聯絡資訊
假設有 A->B->C 三層 A最上層 C最下層 在此protocol stack中A產生的data會pass給B B將A的data當作payload再加上自己的header再pass給C pseudo code大概是 A_Send(){ B_Send(a_msg); } B_Send(a_msg){ b_msg = b_hdr + a_msg; C_Send(b_msg); } 一般我看到的實作方式好像都是 收到上層資料後配置一塊記憶體 填入header再把上層傳來的memory copy過去 每一層都要做一次 配置記憶體和複製資料 感覺很沒效率 是不是有其他好的方法來解決這種問題? 希望是C語言可以做得到 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.1.252
LPH66:應該不可能 因為 A 不知道 C 的存在 140.112.28.92 03/31 20:10
LPH66:A 只知道訊息丟給 B 會負責傳過去而已 140.112.28.92 03/31 20:11
yauhh:什麼叫做效率呢? 分層設計的用意是限定範圍,218.160.114.217 03/31 20:28
yauhh:使每一層的實作簡單並可以做到局部最大效能,218.160.114.217 03/31 20:28
yauhh:這就已經是一種有效率的方式了.218.160.114.217 03/31 20:29
LPH大可能誤會最後一句 C是指C語言 已修改 效率的意思是 A的資料在B會copy一次 到C時屬於A層的資料又會copy一次 同樣的資料 傳幾層就會copy幾次 ※ 編輯: snh 來自: 175.181.245.217 (03/31 20:51)
yauhh:很普通218.160.114.217 04/01 00:21
yauhh:並不是空間極端省著用就叫作效率,在記憶體218.160.114.217 04/01 01:38
yauhh:方面更重要的是顧到資料一致. 你寫個很大218.160.114.217 04/01 01:38
yauhh:很難寫的程式維護同一份記憶體空間資料一致,218.160.114.217 04/01 01:39
yauhh:倒不如多幾個資料複本,但程式很好寫.218.160.114.217 04/01 01:39
LPH66:我的 C 是指最下層.... 140.112.28.92 04/01 12:16
snh:to LPH66 那我不太懂您的意思^^175.181.245.217 04/01 20:39
mcauther:每一層可以用 傳址,size,到最後才打包 114.37.135.102 04/01 20:53
alumi7:很多stack有所謂zero-copy, 可以去看看怎 118.167.11.20 04/04 01:15
alumi7大 可以給keyword嗎? 謝謝 ※ 編輯: snh 來自: 175.181.245.217 (04/06 21:06)