美文网首页
C++内存篇(一):内置类型的机器实现和sizeof

C++内存篇(一):内置类型的机器实现和sizeof

作者: wangawu121 | 来源:发表于2020-03-23 17:53 被阅读0次

    内存篇(一):内置类型的机器实现和sizeof

    一、内置类型的机器实现

    C++内置类型及尺寸:

    类型 含义 最小尺寸
    bool 布尔类型 未定义
    char 字符 8位
    wchar_t 宽字符 16位
    char16_t Unicode字符 16位
    char32_t Unicode字符 32位
    short 短整型 16位
    int 整型 16位
    long 长整型 32位
    long long 长整型 32位
    float 单精度浮点数 6位有效数字
    double 双精度浮点数 10位有效数字
    long double 扩展精度浮点数 10位有效数字
    • 字节(byte):计算机里可寻址的最小内存块,一般为8位
    • 字(word):计算机里存储的基本单元,一般为32位或64位。
    • 计算机将每个字节和一个地址关联起来,可以看到相邻字节存放的地址相差1:


      image-20200323151535387.png

    ​ 要给一个对象分配内存,是必须指明其类型的,因为其类型指明了数据所占的比特数以及机器要如何解释这些内容,机器可以以此为依据以对象的内存地址作为起始地址往下读入相应大小的比特数并且依据类型进行解释。

    以下是《C++ Primer》里推荐的一些选用类型准则:

    • 当明确知道数值不可能为负时,选用无符号类型
    • 使用int执行整数运算。实际应用中short常常太小而long有和int一样的尺寸。如果数值超过int的范围就使用long long。
    • 浮点数选double,因为float精度经常不够,long double的精度一般没有必要且运行消耗大。

    二、sizeof运算符

    sizeof运算符返回一个表达式或者一个类型所占的字节数,下面来看一下它的用法。

    sizeof(double); //返回8,,意思是8个字节,即double类型的对象所占空间的大小
    double A;
    sizeof A; //返回8,A的类型double的对象所占空间的大小
    double* p;
    sizeof p; //返回4,指针p所占的空间大小
    sizeof *p; //返回8,p指向的类型double所占空间大小
    
    • sizeof满足右结合律(即一个表达式中存在优先级相同的运算符时,右侧运算符优先与操作数结合),且与*运算符优先级一样,所以表达式sizeof *p的组合顺序是从右往左,等价于sizeof( *p)
    • 注意sizeof对于数组和指针操作的数组的区别:
    double p[10];
    sizeof(p); //返回8*10,是整个数组的大小
    double *p1 = new double[10];
    sizeof(p1);//返回4,是一个指针的大小
    

    ​ 尽管p和p1都是一个数组第一个元素的地址,sizeof返回的内容却并不一样,前者返回数组对象类型占用字节数*数组的元素个数,而后者返回的是一个指针占用的字节数。

    相关文章

      网友评论

          本文标题:C++内存篇(一):内置类型的机器实现和sizeof

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