[問題] 請教在Driver這兩種宣告的方式有何好壞處

看板LinuxDev作者 (GreenLinux)時間11年前 (2013/12/05 00:46), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/1
請教各位: 像以下的程式架構: #include xxx.h .............. static int data[1000]; void get_data() { for (i=0; i<1000;i++) data[i] = some_process(); } void save_data(int status) { save(data); } int interrupt_will_do() { get_data(); save_data(Now_Status); } data[1000]這個 matrix 會一直在get_data()更新然後做save_data()等處理 這樣的話, (1)到底data[]像以上的方式宣告在driver的一開始較好(因為這樣 只需要宣告一次), 還是 (2)每次進入get_data()再宣告,然後將data[]的pointer傳給save_data()較好?? 或是(3) 在driver code一開始用 struct 的方式宣告, 然後在 get_data() 及 save_data 以 some_struct.data[] 來處理較好???? 謝謝各位的指導.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.202.188

12/07 01:42, , 1F
(2) 如果 data 不是 static, 那就要注意是否會發生
12/07 01:42, 1F

12/07 01:43, , 2F
C_and_CPP 置底十三誡之第5誡或第6誡之狀況.
12/07 01:43, 2F

12/07 01:45, , 3F
如果是 static, 感覺沒太大差別, 只是 variable scope 問題.
12/07 01:45, 3F

12/07 01:46, , 4F
若要考慮未來可能多個instances,那(3)或許是較佳選項,
12/07 01:46, 4F

12/07 01:48, , 5F
但可能會是 some_struct_pointer->data[] ?
12/07 01:48, 5F

12/07 14:33, , 6F
To yvb: 謝謝你的指導
12/07 14:33, 6F

12/13 16:59, , 7F
2 作法有問題 離開後區域變數值就被其他東西改了
12/13 16:59, 7F

12/13 17:01, , 8F
1跟3不差不多意思吧 我覺得1 3兩個都可
12/13 17:01, 8F

12/13 17:02, , 9F
但要注意是否需要LOCK一下
12/13 17:02, 9F

12/21 11:38, , 10F
要考慮到,driver是在kernel 的環境執行,stack 大小不是
12/21 11:38, 10F

12/21 11:39, , 11F
無限制的
12/21 11:39, 11F
文章代碼(AID): #1IdrnSQK (LinuxDev)
文章代碼(AID): #1IdrnSQK (LinuxDev)