[問題] memory alignment

看板LinuxDev作者 (乘著風去旅行)時間15年前 (2008/11/10 22:41), 編輯推噓3(305)
留言8則, 2人參與, 最新討論串1/1
請問有沒有人在開發 embedded system 時碰過這種情形 ------------------------------------------------------ test_func() { Global *global_struct; //取得 flash 內容並放入到一個 buffer 然後傳給 *global_struct flash_get(&global_struct); // 對 global_struct 的 member 做讀寫 // member 1 // member 2 // member 3 // member 4 // ..... //最後將 global_struct 寫入 flash } ---------------------------------------------------------- 最奇怪的是 當我 去 debug 時 會發現在 做完比如說 member3 或 member4 global_struct 所指的位址 居然自己改變了 明明就只是單純的對 global_struct->memberN 做讀寫 卻會導致莫名奇妙的結果 我懷疑可能是記憶體 alignment 的問題 ( 我使用 mips cpu ) 不知道有沒有人碰過呢 ? 謝謝 --------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.238.93 ※ 編輯: mcauther 來自: 122.116.238.93 (11/10 22:42)

11/12 20:11, , 1F
我以前使用Keil C開發LPC210x的時候有遇過。
11/12 20:11, 1F

11/12 20:12, , 2F
後來才知道不能總是假設struct為連續記憶體 :)
11/12 20:12, 2F

11/12 20:15, , 3F
真有需要連續的話,請查GCC,或是寫個函數copy一下。
11/12 20:15, 3F

11/12 20:17, , 4F
文法修正...上面的 「或是」 改成 「不然」 XDXD
11/12 20:17, 4F

11/20 00:01, , 5F
問一下你傳進去的是指標,實際的buffer 的 alloc是local
11/20 00:01, 5F

11/20 00:02, , 6F
還是global,假設是local當函數返回時實際的記憶體會被
11/20 00:02, 6F

11/20 00:04, , 7F
改變那就不奇怪了,會這樣想是因為您說將內容搬到buffer
11/20 00:04, 7F

11/20 00:05, , 8F
如果不是那還要請問每個member的大小一樣嗎? 幾個byte呢
11/20 00:05, 8F
文章代碼(AID): #1964WfwN (LinuxDev)