[問題] 8-bit系統還是要data alignment嗎?

看板C_and_CPP作者 (沒有暱稱)時間8年前 (2016/02/22 22:36), 8年前編輯推噓1(1012)
留言13則, 3人參與, 最新討論串1/2 (看更多)
如提 在讀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
推,想知道1的答案,雖然我覺得答案是不會有misaligned
02/22 22:43, 1F

02/22 23:35, , 2F
有看過有人寫的lib有用到data alignment
02/22 23:35, 2F

02/22 23:36, , 3F
不過是用在arduino uno 8bit 的版子上
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
問法無法讓回答的人框出只用來回答你問題的有限答案 XD
02/23 05:46, 6F

02/23 05:47, , 7F
因為這個還要解釋到 computer architecture 去
02/23 05:47, 7F

02/23 05:48, , 8F
和發問者所學過的 CPU 跟 ISA 也有關,所以最好多講講你
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
直接跳到 Question 2,大家不知道你已經吸收了哪些。
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
文章代碼(AID): #1MonpMle (C_and_CPP)
文章代碼(AID): #1MonpMle (C_and_CPP)