美文网首页
iOS-OC对象原理_字节对齐

iOS-OC对象原理_字节对齐

作者: 泽泽伐木类 | 来源:发表于2020-09-10 10:53 被阅读0次
基本数据类型在不同操作系统下的大小
C OC 32位 64位
bool BOOL(64位) 1 1
signed char (__signed char)int8_t,BOOL(32bit) 1 1
unsigned char Boolean 1 1
short int16_t 2 2
unsigned short unichar 2 2
int int32_t NSInteger(32bit) boolean_t(32bit) 4 4
unsigned int boolean_t(64bit) NSUInteger(32bit) 4 4
long NSInteger(64bit) 4 8
unsigned long NSUInteger(64bit) 4 8
long long int64_t 8 8
float CGFloat(32bit) 4 4
double CGFloat(64bit) 8 8
内存对齐原则
  • 数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储。
  • 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从
    其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b
    里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
  • 结构体的总大小,也就是sizeof()的结果,.必须是其内部最大成员的整数倍.不足的要补⻬。
For Example
struct Test {
    int a;    //4  0 1 2 3
    float b;  //4  4 5 6 7
    char c;   //1  8
    short d;  //2  9 10 11
    double f; //8  12 13 14 15 |16 17 18 19 20 21 22 23
}Test; //24
2020-09-10 10:21:37.606643+0800 ZZObjc[92851:45306301] sizeof(Test) == 24
struct TestStruct {
    double a;       // 8  0 1 2 3 4 5 6 7
    float b;        // 4  8 9 10 11
    struct Test c;  //最大成员是f(8字节) 8 12 13 14 15 | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
                                                    // 31 32 33 34 35 36 37 38 39
    char d;        // 1 40
    char e;        // 1 41
    double f;      // 8 42 43 44 45 46 47 |48 49 50 51 52 53 54 55
}TestStruct;
2020-09-10 10:21:37.606830+0800 ZZObjc[92851:45306301] sizeof(TestStruct) == 56

总结:当结构体中包含【结构体成员】或【数组】的,取元素中最大元素大小的整数倍开始存储。

总结

以上内容其实应该是C语言基础的内容,这里算是拾忆并记录下。

相关文章

网友评论

      本文标题:iOS-OC对象原理_字节对齐

      本文链接:https://www.haomeiwen.com/subject/asguektx.html