我是靠谱客的博主 俏皮大侠,最近开发中收集的这篇文章主要介绍c语言sizeof怎么计算字节数,理解c语言的sizeof,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部