为啥32位系统4字节对齐效率最高

为什么32位系统4字节对齐效率最高?大家都知道内存的数据对齐吧?但是为什么32位系统4字节对齐效率最高?可能

为什么32位系统4字节对齐效率最高?
大家都知道内存的数据对齐吧?
但是为什么32位系统4字节对齐效率最高?可能有人会说“地址总线总是按照对齐后的地址来访问的,访问效率会高很多”
但这是编译器层面的,我想了解究竟是底层什么机制导致这个结果?
还有如果必须按4字节对齐来访问内存, 那么32位系统只需要30根地址总线就够了,为什么还是32根?
望各位前辈指点迷津……为啥32位系统4字节对齐效率最高
[解决办法]
简单来说吧

比如这么一个结构体
struct foo {
short s;
int   n;
};

struct foo bar;
假设bar的地址是0x12345670
如果不按4字节对齐
那么bar.n的地址就是0x12345672, 也就是下面的黑体部分
0x12345670 a0 a1 a2 a3
0x12345674 b0 b1 b2 b3
为了取到n的值就需要访问两次内存,一次访问0x12345670,一次访问0x12345674
然后把两个int值组合在一起,a2 a3 b0 b1

[解决办法]
++,另外4个字节为4x8=32,何来30根地址总线?再说也是32位的数据总线,指的是位宽而不是地址。

引用:
简单来说吧

比如这么一个结构体
struct foo {
short s;
int   n;
};

struct foo bar;
假设bar的地址是0x12345670
如果不按4字节对齐
那么bar.n的地址就是0x12345672, 也就是下面的黑体部分
0x12345670 a0 a1 a2 a3
0x12345674 b0 b1 b……

[解决办法]
并不是必须,而是对齐了速度比较快
这个应该是cpu设计时决定的,比如对齐了可以一次取出4个字节,如果没对齐需要取两次,这样速度就慢了
另外这个并不能减少地址总线根数,因为还是有取单一数据的需求