作者anoymouse (没有昵称)
看板C_and_CPP
标题[问题] 8-bit系统还是要data alignment吗?
时间Mon Feb 22 22:36:04 2016
如提
在读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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1456151766.A.BE8.html
※ 编辑: anoymouse (220.136.118.153), 02/22/2016 22:38:35
1F:推 Caesar08: 推,想知道1的答案,虽然我觉得答案是不会有misaligned 02/22 22:43
2F:→ anoymouse: 有看过有人写的lib有用到data alignment 02/22 23:35
3F:→ anoymouse: 不过是用在arduino uno 8bit 的版子上 02/22 23:36
4F:→ anoymouse: 当然可能不一定对 02/22 23:37
5F:→ tinlans: 坦白说以你想要知道的答案来说,要解释的范围很大,你的 02/23 05:45
6F:→ tinlans: 问法无法让回答的人框出只用来回答你问题的有限答案 XD 02/23 05:46
7F:→ tinlans: 因为这个还要解释到 computer architecture 去 02/23 05:47
8F:→ tinlans: 和发问者所学过的 CPU 跟 ISA 也有关,所以最好多讲讲你 02/23 05:48
9F:→ tinlans: 自身背景和已知的东西。以前还有精神打十页直接回,现在 02/23 05:49
10F:→ tinlans: 要上班,交给别人了... 02/23 05:49
11F:→ tinlans: 你第二个问题,最好也先说说你读完那网页了解了什麽, 02/23 05:52
12F:→ tinlans: 大家才知道你中间是不是有什麽观念没学到或搞错。 02/23 05:52
13F:→ 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