转自:

https://blog.csdn.net/hi_baymax/article/details/82415896

和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):

1 sizeof(short int)<=sizeof(int)

2 sizeof(int)<=sizeof(long int)

3 short int至少应为16位(2字节)

4 long int至少应为32位。 unsigned 是无符号的意思。

例如:

16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节

32位编译器

char :1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节

64位编译器 char :1个字节 char*(即指针变量): 8个字节 short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 8个字节 long long: 8个字节 unsigned long: 8个字节

总结:不同位数的编译器指针变量的字节数不同,指针变量即地址,亦即寻址空间,等于2^编译器位数

注意:对字符串进行sizeof操作的时候,会把字符串的结束符"\0"计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。数组作为函数参数传递的时候,已经退化为指针了

在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。

如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间

虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。

最新文章

  1. EXCEL中对1个单元格中多个数字求和
  2. Android循环滑动寻找元素,直接代码
  3. maven笔记
  4. ionic build android 报错分析
  5. 不等高cell的搭建(一)
  6. [转]LOG4J汇编教程edit Z10
  7. WPF 视图分组排序
  8. Ubuntu下与菜单和图标相关的几个文件夹
  9. UESTC_方老师分身 I CDOJ 914
  10. matab plot指令和低通滤波器的响应图
  11. Ansible(二) - 配置及命令简介
  12. [转载] Spark:大数据的“电光石火”
  13. 详解Ajax请求(二)——异步请求原理的分析
  14. SSH上一个随笔的基础上添加上hibernate支持
  15. list转换string
  16. sortable的基本属性
  17. Cat8 八类网线是什么?与Cat5、Cat6、Cat7网线的区别?
  18. 理解ORM的前提:数据库中的范式和约束
  19. loglevel-metamask
  20. 使用 urllib 分析 Robots 协议

热门文章

  1. (cvpr2019) The Degradation Model and Solution of DPSR
  2. JS运算符、NaN
  3. 高级shell 脚本
  4. Mysql与Postgresql
  5. linux基础之加密解密、PKI及SSL、创建私有CA
  6. Xgboost GPU 加速
  7. Git 与 GitHub 简介
  8. CentOS7攻克日记(四) —— 安装Mysql和Redis
  9. matlab 入门
  10. 使用Spring MVC实现数据绑定