看板 C_and_CPP 關於我們 聯絡資訊
如提 在讀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
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