本文讨论的是 C 语言中的一个运算符:sizeof

注意,是运算符,不是函数。

sizeof 的结果是在编译时就可以确定的,于是有人认为,sizeof 的结果取决于编译器。这样说也对,但是我认为,C 和 C++ 旨在成为高效的语言。为了实现最大效率,C 或 C++ 实现必须考虑源自底层硬件的某些因素。出于这个原因,确保每种基本类型都基于硬件直接支持的某种表示是很有意义的。因此,sizeof 的结果取决于硬件。

可以这么说,sizeof 的结果取决于处理器(更具体地说,ISA,指令集架构,例如 x86 和 x86-64)和包括编程模型在内的编译器。

如果你不确定在你的机器上各种类型占多少个字节,最好写个代码测试一下。

#include <stdio.h>#define TEST_SIZEOF_TYPE(x) \
do{\
printf(#x ": %lu\n",sizeof(x));\
}while(0)int main(void)
{TEST_SIZEOF_TYPE(int);TEST_SIZEOF_TYPE(char);TEST_SIZEOF_TYPE(short);TEST_SIZEOF_TYPE(long);TEST_SIZEOF_TYPE(long long);TEST_SIZEOF_TYPE(float);TEST_SIZEOF_TYPE(double);TEST_SIZEOF_TYPE(long double);TEST_SIZEOF_TYPE(char*);
}

我的运行结果是:

int: 4
char: 1
short: 2
long: 8
long long: 8
float: 4
double: 8
long double: 16
char*: 8

参考资料:

c++ - int 的大小是否取决于编译器和/或处理器? - 堆栈溢出

sizeof 的结果取决于什么相关推荐

  1. 面试知识点(C++)

    仅作个人记录 参考了网上的很多资料 文章目录 构造.拷贝构造/赋值.析构 构造函数和析构函数是否可以抛出异常 什么时候生成默认构造函数(无参构造函数)?什么时候生成默认拷贝构造函数?什么是深拷贝?什么 ...

  2. c语言求占用内存sizeof,C语言中sizeof的用法

    定义: sizeof是神圣的sizeof,它是C / C ++中的运算符. 简而言之,其功能是返回对象或类型占用的内存字节数. MSDN上的解释是: sizeofkeyword给出字节,关联的类型(包 ...

  3. Sizeof与Strlen的区别与联系(转)

    一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.     它的功能是:获得保证能 ...

  4. C++ sizeof 使用规则及陷阱分析【转】

    目录 一.什么是sizeof 二.sizeof用法 三.基本数据类型的sizeof 四.复杂数据类型的sizeof及其数据对齐问题 五.class类型的sizeof特别探讨 六.总结 一.什么是siz ...

  5. strlen 与 sizeof 的区别详解

    写函数的时候,经常要对数组和字符串以及指针进行初始化. strlen 是函数,sizeof 是运算符. strlen 测量的是字符的实际长度.以'\0' 结束. 而sizeof 测量的是字符的分配大小 ...

  6. C++阶段01笔记02【数据类型(整型、sizeof关键字、实型(浮点型)、字符型、转义字符、字符串型、布尔类型 bool、数据的输入)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 2 数据类型 2.1 整型 2.2 sizeof关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串 ...

  7. sizeof 数组_简单的一维数组竟然有这么多坑?

    各位,今儿给大家带来一个不错的C语言试题,此题对你在C中的数组理解与掌握是个不错的检查,话不多说,请看题: 问题是会输出什么? 我们就开门见山了,通过阅读代码发现本体主要考察以下四方面:数组的指针法访 ...

  8. C学习杂记(四)sizeof计算联合体大小

    #include <stdio.h>union u1 {char a[13];int b; };int main(void) {printf("%d\n", sizeo ...

  9. c++ 类的sizeof

    sizeof()是c++的运算符,返回变量或者类型占用的字节数.如sizeof(int) 为4,sizeof(char) 为1. 那么类大小呢,如 1 class A { 2 char a; 3 sh ...

最新文章

  1. 适当地使用公共语言运行库的垃圾回收器和自动内存管理
  2. django中model模型
  3. jquery-easyui环境的搭建及测试
  4. 集成学习python_从Boosting到Stacking,概览集成学习的方法与性能
  5. 手动爬虫之流程笔记1(python3)
  6. Java 8 Friday Goodies:Lambda和SQL
  7. 超文本传输协议及HTTP包
  8. 什么是Mybatis ?
  9. C# 简单日志文本输出
  10. nginx源码编译安装及使用
  11. ERP原理与应用期末复习
  12. js字符串转json, json转字符串
  13. 计算机ps相框怎么做,教你用PS给相片加上很漂亮的相框
  14. 2021互联网大厂中秋礼盒大盘点
  15. 伟大程序员必须具备的7个好习惯
  16. 恢复希捷硬盘丢失数据的方法
  17. centos安装git时出错提示make[1]: *** [perl.mak] Error 2
  18. Windows安装jupyter教程
  19. 如何重设或更改Verizon FIOS路由器的密码
  20. 一种快速锁定的 Fractional PLL 设计

热门文章

  1. 【日本語学習】 刺身
  2. maven pom配置文件样本
  3. 8.3 直接插入排序
  4. Linux和Windows的遍历目录下所有文件的方法对比
  5. .net 调用java service 代理类方法
  6. 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...
  7. 恢复博客更新 --- 逆序单项链表 要求空间复杂度o(1) 时间复杂度o(n)
  8. NPOI读取Excel模板并向其中写入数据
  9. Python进阶_wxpy学习:常见问题
  10. Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题