1.寻址
cpu——-地址总线——RAM
RAM——数据总线——-CPU
一个总线对应一个byte的地址
8个总线就是256byte内存
32个总线就是4G内存
机器字长
每次操作4字节——-需要———-32位数据总线—》机器字长
每次操作8字节——-需要———-64位数据总线—》机器字长
经过一次读取可以的得到八个地址
第一次访问: 0 1 2 3 4 5 6 7 第二次访问:8 9 10 11 12 13 14 15
每次访问的第一个地址都是8的倍数
如果要访问1-9这八个就要访问两次并进行裁剪拼接处理(慢)
所以数据尽量以规整的单位存数据,不要跨开来
内存对齐:
- 以自身占用大小为一个盒子(对齐边界)
- 如果内存盒子里又别的小盒子了,就换一个
- 盒子最大不能超过平台机器字长
选择一个自己的标间,不会被分开读取,也不会太浪费内存
目的:减少浪费,提高性能
结构体的边界:
想把一个结构体放在一个边界里,这样读取次数就是:边界/机器字长
type s1 struct {
a int8
c int16
d int32
b int64
}
//内存为16byte
type s2 struct {
a int8
c int64
d int32
b int16
}
//内存为24byte