[問題] 8-bit系統還是要data alignment嗎?
如提
在讀data alignment 碰到一些問題
1.如果每次都是1 byte抓資料,那就不會有misaligned了問題吧?
還是說不管什麼系統都要照資料大小的倍數來排記憶體位址? 感覺8bit沒必要啊
2.
http://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packi
ng/(縮網好像不能用 抱歉)
這網站很下面講的General Questions 第二點
請問是什麼意思? 如果是32位元系統不是一律抓32bit嗎 不管放在哪一條bank有差嗎?
這時候又想問 多抓的24bits怎麼辦? 再擺回去?
3.Pointer Mishaps 不過似乎沒有很詳細 只是說pointer有可能會有
misaligned 主要是下一段說malloc
"It is usually aligned to 8 byte boundary on 32 bit machines."
回傳的地址是32bit怎麼會是8byte? 求解!
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.118.153
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1456151766.A.BE8.html
※ 編輯: anoymouse (220.136.118.153), 02/22/2016 22:38:35
推
02/22 22:43, , 1F
02/22 22:43, 1F
→
02/22 23:35, , 2F
02/22 23:35, 2F
→
02/22 23:36, , 3F
02/22 23:36, 3F
→
02/22 23:37, , 4F
02/22 23:37, 4F
→
02/23 05:45, , 5F
02/23 05:45, 5F
→
02/23 05:46, , 6F
02/23 05:46, 6F
→
02/23 05:47, , 7F
02/23 05:47, 7F
→
02/23 05:48, , 8F
02/23 05:48, 8F
→
02/23 05:49, , 9F
02/23 05:49, 9F
→
02/23 05:49, , 10F
02/23 05:49, 10F
→
02/23 05:52, , 11F
02/23 05:52, 11F
→
02/23 05:52, , 12F
02/23 05:52, 12F
→
02/23 05:54, , 13F
02/23 05:54, 13F
目前從網頁所學習到的是: 網頁上所表示的bank的記憶體位址從0開始,似乎是offset的
量,但是為了方便計算,所以假裝是記憶體的位址。
我的理解是 以他所舉例,32bit系統,bank所配置的來說都是一次抓4bytes,所以bank是
從bank0~bank3
放滿就換下一列,因為一次抓4bytes的關係,又是從0開始找吧,所以每4,4,4,4......的
找就得符合資料型別倍數的原則。如果int的資料從bank2開始放,那在抓的時候只會抓到
一半,還要在一個工作周期才會抓到下一半。
雖然short"貌似"從bank1開始放好像沒問題,不過根據系統的一致性是最容易設計的原則
,讓所有的type都符合倍數的記憶體配置,只好讓short只能放在2的倍數的記憶體位址(
這是我猜的)
而padding是因為struct裡面有各種資料型別,如果建一個結構陣列,結構跟結構之間內
部的變數位址都得data alignment,以免下一個結構的資料misaligned。
所以作者開頭提到的四個struct就還看得懂。
※ 編輯: anoymouse (118.160.24.135), 02/23/2016 21:02:13
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):