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

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

一、内置类型的机器实现

C++内置类型及尺寸:

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

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

以下是《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返回的内容却并不一样,前者返回数组对象类型占用字节数*数组的元素个数,而后者返回的是一个指针占用的字节数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值