美文网首页
iOS 数据类型占用内存

iOS 数据类型占用内存

作者: MQ_Twist | 来源:发表于2020-08-20 11:14 被阅读0次

    不要去寻找那些你不想遇到的东西。

    前言

    坐在马桶上冥想的时候,就思绪满天飞,不知道为啥就想到有次面试的时候,被问到iOS的数据类型占用内存情况,最近还是有点时间就整理了一下。

    • 32位
    char : 1个字节
    char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
    short int : 2个字节
    int : 4个字节                        范围  -2147483648~2147483647
    unsigned int : 4个字节
    long : 4个字节                         范围 和int一样
    long long : 8个字节                 范围  -9223372036854775808~9223372036854775807
    unsigned long long : 8个字节    最大值:1844674407370955161
    float : 4个字节
    double : 8个字节
    
    • 64位
    char : 1个字节
    char*(即指针变量) : 8个字节
    short int : 2个字节
    int : 4个字节                      范围  -2147483648~2147483647
    unsigned int : 4个字节
    long : 8个字节                     范围  -9223372036854775808~9223372036854775807
    long long : 8个字节            范围  -9223372036854775808~9223372036854775807
    unsigned long long : 8个字节    最大值:1844674407370955161
    float : 4个字节
    double : 8个字节
    

    快速记忆法
    只有char*(32位 4 Byte,64位 8 Byte)和long(32位 4 Byte,64位 8 Byte)所占字节是不同的。

    特别的:4个字节的最大范围是4294967295, int只是占四个字节,不能用int来存储四个字节的数,要不然会越界。

    • intNSIntege区别

    在苹果的api实现中,NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型。
    定义的代码类似于下:

    #if __LP64__ || 0 || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSUInteger;
    #else
    typedef int NSInteger;
    typedef unsigned int NSUInteger;
    #endif
    

    NSIntegerint的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)。

    后记

    温故而知新,可以为师矣。

    相关文章

      网友评论

          本文标题:iOS 数据类型占用内存

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