结构体为什么要内存对齐,为了减少cpu内存读取的次数。
那么为什么会减少cpu内存读取的次数呢?
网上很多说法是因为cpu读取数据的粒度是4个字节,所以如果不对齐就会读两次。
我理解的是cpu读取内存是通过段指针+偏移指针读取的,如果数据跨段了,那么才需要读两次?
学习汇编的时候知道cpu会根据指令确定读取内存的字节数,并不一定是一次读取四个字节,读一个字节也可以。
到底哪个是正确的呢?
cpu读取内存是通过段指针+偏移指针读取
你这个是早期dos下16bit计算机访问20bit地址,早就过时了。
现在的cpu+操作系统,都是平坦寻址
cpu会根据指令确定读取内存的字节数,并不一定是一次读取四个字节,读一个字节也可以。
这说的是逻辑层面的,物理层面,可不可以是一回事,是否充分利用硬件资源了是另一回事。如果访问一个字节,也可以但是会慢,因为地址线就是32/64位的,你访问1个字节,等于一辆卡车拉货,没有拉满。
司机虽然也能帮你拉,但是效率低。