推 Caesar08: 推,想知道1的答案,雖然我覺得答案是不會有misaligned 02/22 22:43
→ anoymouse: 有看過有人寫的lib有用到data alignment 02/22 23:35
→ anoymouse: 不過是用在arduino uno 8bit 的版子上 02/22 23:36
→ anoymouse: 當然可能不一定對 02/22 23:37
→ tinlans: 坦白說以你想要知道的答案來說,要解釋的範圍很大,你的 02/23 05:45
→ tinlans: 問法無法讓回答的人框出只用來回答你問題的有限答案 XD 02/23 05:46
→ tinlans: 因為這個還要解釋到 computer architecture 去 02/23 05:47
→ tinlans: 和發問者所學過的 CPU 跟 ISA 也有關,所以最好多講講你 02/23 05:48
→ tinlans: 自身背景和已知的東西。以前還有精神打十頁直接回,現在 02/23 05:49
→ tinlans: 要上班,交給別人了... 02/23 05:49
→ tinlans: 你第二個問題,最好也先說說你讀完那網頁瞭解了什麼, 02/23 05:52
→ tinlans: 大家才知道你中間是不是有什麼觀念沒學到或搞錯。 02/23 05:52
→ tinlans: 直接跳到 Question 2,大家不知道你已經吸收了哪些。 02/23 05:54
目前從網頁所學習到的是: 網頁上所表示的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