1.寻址
    cpu——-地址总线——RAM
    RAM——数据总线——-CPU
    一个总线对应一个byte的地址
    8个总线就是256byte内存
    32个总线就是4G内存

    机器字长
    每次操作4字节——-需要———-32位数据总线—》机器字长
    每次操作8字节——-需要———-64位数据总线—》机器字长

    image.png

    经过一次读取可以的得到八个地址

    第一次访问: 0 1 2 3 4 5 6 7 第二次访问:8 9 10 11 12 13 14 15

    每次访问的第一个地址都是8的倍数
    如果要访问1-9这八个就要访问两次并进行裁剪拼接处理(慢)

    所以数据尽量以规整的单位存数据,不要跨开来

    内存对齐:

    • 以自身占用大小为一个盒子(对齐边界)
    • 如果内存盒子里又别的小盒子了,就换一个
    • 盒子最大不能超过平台机器字长

    image.png

    选择一个自己的标间,不会被分开读取,也不会太浪费内存

    目的:减少浪费,提高性能

    结构体的边界:
    想把一个结构体放在一个边界里,这样读取次数就是:边界/机器字长

    1. type s1 struct {
    2. a int8
    3. c int16
    4. d int32
    5. b int64
    6. }
    7. //内存为16byte
    8. type s2 struct {
    9. a int8
    10. c int64
    11. d int32
    12. b int16
    13. }
    14. //内存为24byte