解析C语言中的sizeof
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
二、sizeof的使用方法
1、用于数据类型
sizeof使用形式:sizeof(type)
数据类型必须用括号括住。如sizeof(int)。
2、用于变量
sizeof使用形式:sizeof(var_name)或sizeof var_name
变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。
注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。
如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。
三、sizeof的结果
sizeof操作符的结果类型是size_t,它在头文件<stddef.h>中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
1、若操作数具有类型char、unsigned char或signed char,其结果等于1。
ANSI C正式规定字符类型为1字节。
2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。
3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。
4、当操作数具有数组类型时,其结果是数组的总字节数。
5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。
让我们看如下结构:
struct {char b; double x;} a;
在某些机器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。
6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。
四、sizeof与其他操作符的关系
sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。
五、sizeof的主要用途
1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:
void *malloc(size_t size),
size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。
2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:
void * memset(void * s,int c,sizeof(s))。
六、建议
由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用ziseof来代替常量计算。
相关文章:

开源大咖齐聚2020启智开发者大会,共探深度学习技术未来趋势
2020年12月2日,“OpenI/O 2020启智开发者大会”在北京国家会议中心召开。大会以“启智筑梦 开源先行”为主题,立足于国际国内开源大环境和发展趋势。开源领域顶尖专家学者和企业领军人物共聚一堂,探讨开源开放呈现出的新形势、新格局、新机…

linux中编译C语言程序
1.首先安装gcc编辑器 yum install gcc* -y 2.编写C语言程序 [roottest ~]# vim aa.c #include<stdio.h> int main( ) {int a;printf("请输入一个三位数的整数:");scanf("%d",&a);if(a>100&&a<1000)printf("百位是:…

typedef的四个用途和两大陷阱
typedef的四个用途和两个陷阱 -------------------…
升级版APDrawing,人脸照秒变线条肖像画,细节呈现惊人
作者 | 高卫华出品 | AI科技大本营随着深度学习的发展,GAN模型在图像风格转换的应用越来越多,其中不少都实现了很好的效果。此前,reddit上的一个技术博主AtreveteTeTe基于GAN模型混合将普通的人像照片卡通化,并通过First Order Mo…

error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
1 这个error是什么原因造成的 cmake默认选择的是x86,即32位的生成子。 2 怎么解决这个error 在cmake ..的时候,在后面加上“-G "Visual Studio 12 2013 Win64"”选项即可。 3 怎么在CMakeLists.txt中进行相应的设置来解决这个问题 这个还未知。…

Linux的epoll
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中&#x…
[QA]Python字节码优化问题
这篇文章来自在Segmentfault 上面我提出的一个问题 问题背景: Python在执行的时候会加载每一个模块的PyCodeObject,其中这个对象就包含有opcode,也就是这个模块所有的指令集合,具体定义在源码目录的 /include/opcode.h 中定义了所有的指令集合࿰…
【滴滴专场】深度学习模型优化技术揭秘
滴滴拥有海量数据以及 AI 推理需求,GPU 在人脸识别、自动驾驶、地图导航等场景大量使用,滴滴云IFX团队针对斯坦福 DAWNBench 榜单的 ImageNet 模型也进行了深入优化,在 NVIDIA T4 上达到了 0.382 ms 的 Inference Latency 性能,打…

11.python并发入门(part9 多进程模块multiprocessing基本用法)
一、回顾多继承的概念。由于GIL(全局解释器锁)的存在,在python中无法实现真正的多线程(一个进程里的多个线程无法在cpu上并行执行),如果想充分的利用cpu的资源,在python中需要使用进程。二、mul…

将不确定变为确定~Flag特性的枚举是否可以得到Description信息
回到目录 之前我写过对于普通枚举类型对象,输出Description特性信息的方法,今天主要来说一下,如何实现位域Flags枚举元素的Description信息的方法。 对于一个普通枚举对象,它输出描述信息是这样的 public enum Status{[Descriptio…
中科大“九章”历史性突破,但实现真正的量子霸权还有多远?
作者 | 马超 出品 | AI科技大本营 头图 | CSDN下载自视觉中国 10月中旬,政府高层强调要充分认识推动量子科技发展的重要性和紧迫性,加强量子科技发展战略谋划和系统布局,把握大趋势,下好先手棋。 今天,我国的量子科技领…

php析构函数的用法
简单的说,析构函数是用来在对象关闭时完成的特殊工作,比如我写的上例,在实例化同时打开某文件,但是它什么时候关闭呢,用完就关闭呗,所以析构函数直接关闭它, 又或者在析构时,我们将处理好的某些数据一并写进数据库,这时可以考虑使用析构函数内完成,在析构完成前,这些对象属性仍…

泛型中? super T和? extends T的区别
经常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。 …

两大AI技术集于一身,有道词典笔3从0到1的飞跃
作者 | Just 出品 | AI科技大本意(ID:rgznai100) “双十一”结束的钟点刚刚敲响,拥有电子消费品的企业便很快对外界秀了一把今年的销售战绩,网易有道也不例外。在电子词典单品品类榜单上,有道词典笔稳稳拿下天猫和京东…

VIM进阶功能
2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/gunl/archive/2011/08/15/2139588.html 该网页上介绍了以下内容: 查找快速移动光标复制、删除、粘贴数字命令组合快速输入字符替换多文件编辑宏替换TABautocmd常用脚本常用配置另一篇…

最简便的清空memcache的方法
如果要清空memcache的items,常用的办法是什么?杀掉重启?如果有n台memcache需要重启怎么办?挨个做一遍? 很简单,假设memcached运行在本地的11211端口,那么跑一下命令行: $ echo ”f…

mongodb启动
将mongodb安装为Windows服务,让该服务随Windows启动而启动: 开启服务: 转载于:https://www.cnblogs.com/dabinglian/p/6861413.html
赠书 | AI 还原宋代皇帝,原来这么帅?!
整理 | 王晓曼来源 | 程序人生 (ID:coder _life)封图 | 大谷视频《人工智能还原的宋代皇帝,原来这么帅?!》*文末有赠书福利昨日,一条“人工智能还原的宋代皇帝”喜提热搜,博主大谷借…

Deep learning:三十六(关于构建深度卷积SAE网络的一点困惑)
前言: 最近一直在思考,如果我使用SCSAE(即stacked convolution sparse autoendoer)算法来训练一个的deep model的话,其网络的第二层开始后续所有网络层的训练数据从哪里来呢?其实如果在这个问题中ÿ…

用memcache.php监测memcache的状况
最新的memcache pecl中,新增了一个memcache.php,这个php文件可以用来方便的查看memcache的状况,界面上与apc自带的apc.php风格一致。 如图: 应该算是最方便的监测memcache的办法了。 memcache.php源文件下载 是一个PHP源文件,…

想知道垃圾回收暂停的过程中发生了什么吗?查查垃圾回收日志就知道了!
\关键点\垃圾回收日志中包括着一些关键性能指标; \要做一次正确的垃圾回收分析需要收集许多数据,所以好的工具是非常必要的; \除了垃圾回收之外还有很多事件都可能会让应用程序暂停; \让你的应用程序暂停的事件也会让垃圾回收器暂…

Linux必学的网络操作命令
因为Linux系统是在Internet上起源和发展的,它与生俱来拥有强大的网络功能和丰富的网络应用软件,尤其是TCP/IP网络协议的实现尤为成熟。Linux的网络命令比较多,其中一些命令像ping、ftp、telnet、route、netstat等在其它操作系统上也能看到&am…
丢弃Transformer,FCN也可以实现E2E检测
作者 | 王剑锋来源 | 知乎CVer计算机视觉专栏我们基于FCOS,首次在dense prediction上利用全卷积结构做到E2E,即无NMS后处理。我们首先分析了常见的dense prediction方法(如RetinaNet、FCOS、ATSS等),并且认为one-to-ma…

Linux命令基础--uname
uname 显示系统信息 语 法:uname [-amnrsvpio][--help][--version] 补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。 参 数: -a或-all 详细输出所有信息,依次为内核名称,主机名&am…

FEC之我见一
顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是 纠错神髓:收到的媒体包冗余包 > 原始媒体包数据 直到满足 收到的媒体包 冗余包 > 原始媒体包数据 则进入恢复模式,恢复出…

改变Repeater控件中按钮颜色
昨晚有在论坛看到一帖,手上的工作一直忙到现在,Insus.NET现在抽点时间尝试实现它。 Insus.NET没有使用数据库作为数据源,而是使用List<T>作为数据源。因此你在这篇博文中学到很多有关泛型的知识。另外Insus.NET使用CheckBoxList来替代多…
CSDN湘苗培优,遇见更好的自己
CSDN 湘苗培优报名火热进行中!JOIN US号外!号外!“湘苗培优”报名火热进行中!????????????????????????为什么要报名“湘苗培优”只要你想学,这里有CSDN技术认证、企业导师零距离技术交流求职…

两个无序单链表,排序后合并成一个有序链表
两个无序单链表,排序后合并成一个有序链表算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中。#include<stdio.h>#include<stdlib.h>struct stud/*定义链…

FEC之我见三
继续上文讲解: 3)标准的RTP头结构如下所示: 其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头。RTP扩展投中承载如下信息:1).当前包所在的Group组序号&…

集体智慧及其常用算法
集体智慧定义是指由许多的个体通过合作与竞争中所显现出来的智慧,集体智慧是一种共享的或者群体的智能。它是从许多个体的合作与竞争中涌现出来的。集体智慧在细菌、动物、人类以及计算机网络中形成,并以多种形式的协商一致的决策模式出现。常用算法如下…