简单来说吧 比如这么一个结构体 struct foo { short s; int n; }; struct foo bar; 假设bar的地址是0x12345670 如果不按4字节对齐 那么bar.n的地址就是0x12345672, 也就是下面的黑体部分 0x12345670 a0 a1 a2 a3 0x12345674 b0 b1 b……
32位CPU的地址总线32根,寄存器是32位的。
引用 2 楼 turingo 的回复: ++,另外4个字节为4x8=32,何来30根地址总线?再说也是32位的数据总线,指的是位宽而不是地址。 引用 1 楼 mymtom 的回复: 简单来说吧 比如这么一个结构体 struct foo { short s; int n; }; struct foo bar; 假设bar的地址是0x12345670 如果不按4字……
引用 3 楼 ckc 的回复:并不是必须,而是对齐了速度比较快 这个应该是cpu设计时决定的,比如对齐了可以一次取出4个字节,如果没对齐需要取两次,这样速度就慢了 另外这个并不能减少地址总线根数,因为还是有取单一数据的需求 我在想,数据对齐固然速度快,但是要是搞 嵌入式 单片机什么的,这样做的代价不就是浪费内存空间吗?计算机内存足够大,但万一 单一芯片内存不够怎么办……
并不是必须,而是对齐了速度比较快 这个应该是cpu设计时决定的,比如对齐了可以一次取出4个字节,如果没对齐需要取两次,这样速度就慢了 另外这个并不能减少地址总线根数,因为还是有取单一数据的需求
引用 2 楼 turingo 的回复:++,另外4个字节为4x8=32,何来30根地址总线?再说也是32位的数据总线,指的是位宽而不是地址。 引用 1 楼 mymtom 的回复: 简单来说吧 比如这么一个结构体 struct foo { short s; int n; }; struct foo bar; 假设bar的地址是0x12345……
++,另外4个字节为4x8=32,何来30根地址总线?再说也是32位的数据总线,指的是位宽而不是地址。 引用 1 楼 mymtom 的回复: 简单来说吧 比如这么一个结构体 struct foo { short s; int n; }; struct foo bar; 假设bar的地址是0x12345670 如果不按4字节对齐 那么bar.n的地址就是0x12……
简单来说吧 比如这么一个结构体 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的值……
3,882
社区成员
9,045
社区内容
加载中
试试用AI创作助手写篇文章吧