概述
c语言有很多用起来需要特别注意的地方,我们(计算机学习微信公众号:jsj_xx)以后会分析其中有使用价值的点。今天我们一起看看sizeof。c语言通过类型长度来达到指针的灵活性,我们觉得,某种意义上讲,是sizeof功能成就了c指针。
基础知识
首先,要知道sizeof 是关键字不是函数。也就是说,用到sizeof的地方其实在编译阶段就已经计算出结果了,不是(也不能)在程序运行时动态地计算。换句话说,代码中同一个sizeof的调用只能输出一个值,而不可能有其它别的值(后文会看到,其实变长数组是颠覆了这个规律的)。再换句话说,就是反汇编就能看到sizeof调用的结果!
其次,sizeof的计算结果跟编译器的字节对齐方式有关。在默认情况下,c编译器为每一个变量按其类型大小分配空间,这种默认方式是可以修改的,通过#pragma pack (n)或者__attribute((aligned (n)))。
最后,要知道对齐是个性能要求,不是必须的。我们这里仅考虑gcc编译器,不考虑vc编译器。比如ia32下,gcc对double、long long这样的8字节变量,仍然是按4字节对齐,即使设置#pragma pack(8)的情况下。到了x64_64下,开始统一了,全部真的都是按照类型大小对齐的了。至于为何跟性能相关,我们以后讲到cpu cache时再重新考虑这个问题,现在我们只要知道,因为地址总线放地址时肯定都是对齐的,所以不对齐的话会增加读取周期就行了。
下文全部以gcc+x86_64+结构体,来求解sizeof。
计算原理
对于每个数据类
最后
以上就是俏皮大侠为你收集整理的c语言sizeof怎么计算字节数,理解c语言的sizeof的全部内容,希望文章能够帮你解决c语言sizeof怎么计算字节数,理解c语言的sizeof所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复