02-内存对齐原理

226 阅读1分钟

记录lldb的相关指令

po	打印信息
p	打印详细的信息
bt	打出堆
register read	读取寄存器
x	读取内存段
x/4gx	读取4段内存段

相关指令操作

内存对齐

// 下面示例的两个结构体 并标注其大小
struct Struct1 {
    double a; // 8
    char b; // 1
    int c; // 4
    short d; // 2
}struct1;

struct Struct2 {
    double a; // 8
    int b; // 4
    char c; // 1
    short d; // 2
}struct2;

内存对齐的相关原则

  • 数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储)。
  • 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
  • 收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补⻬

参考推荐的大神博客 www.jianshu.com/p/782d8116b… 有如下示例

总结

内存对齐的原则就是下一个占据空间的号码要是类型大小的倍数,如果不是的话就要向后继续寻找整数倍的位置进行放置。