问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言结构体所占用的字节数如何计算

发布网友 发布时间:2022-04-24 09:05

我来回答

3个回答

热心网友 时间:2022-05-05 23:43

  结构体的数据类型的有点多我们就不啰嗦了,直接来看相同数据结构体的几种书写的格式吧。

  格式一:  

  01.struct tagPhone
  02.{
  03.     char   A;
  04.     int    B;
  05.     short  C;
  06.}Phone;

  格式二:

  01.struct tagPhone
  02.{
  03.     char   A;
  04.     short  C;
  05.     int    B;
  06.}Phone2;

  格式三:

  01.struct tagPhone3
  02.{
  03.     char   A;
  04.     char   B[2];
  05.     char   C[4];
  06.}Phone3;


我们都知道,char类型占用1个字节,int型占用4个字节,short类型占用2个字节,long占用8个,double占用16个;

  那么我们可能会犯一个错误就是直接1+4+2=7,该结构体占用7个字节。这是错的。

  以下我们简单分析下:

  计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小。

  对格式一:

  

  

  以int型占用4个来作为倍数,因为A占用一个字节后,B放不下,所以开辟新的单元,然后开辟新的单元放C,所以格式一占用的字节数为:3*4=12;

  同理对于格式二,

  

  A后面还有三个字节,足够C存放,所以C根着A后面存放,然后开辟新单元存放B数据。所以格式二占用的内存字节为2*4=8.

  

  对于格式三:

  

  上面结构计算大小,sizeof(Phone3) = 1 + 2 + 4 = 7, 其大小为结构体中个字段大小之和,这也是最节省空间的一种写法。

  

  总结:

  第一种写法,空间浪费严重,sizeof 计算大小与预期不一致,但是保持了每个字段的数据类型。这也是最常见的漫不经心的写法,一般人很容易这样写;


  第三种写法,最节省空间的写法,也是使用 sizeof 求大小与预期一样的写法,但是全部使用字节类型,丢失了字段本生的数据类型,不方便使用;


  第二种写法,介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。


  只要了解是这些写法的差异性,可以视情况选用。

热心网友 时间:2022-05-06 01:01

这个比较复杂:
1.数据类型不同,计算方法更繁琐
2.需要考虑字节对齐的问题,这是重点!!
3.可以自定义字节对齐的字节数
具体的可以寻找相关文档

热心网友 时间:2022-05-06 02:36

你好,这涉及到字节对齐的问题。
a从0开始,占4个字节;x要从8开始,也占8个字节。因此是16个字节。
关于此方面的详细信息请参考我的文章:
http://blog.sina.com.cn/s/blog_590be5290100g6hd.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 接吻时女生应该怎么做才能配合男友 C语言中字节问题 华为手机屏幕碎了怎么办 接吻的时候女生应该做什么 华为手机屏幕碎了怎么处理啊? 男女朋友第一次接吻,女孩应该怎么样呢? 在c语言中,int,char和short三种类型数据在内存中所占的字节数 华为手机屏幕碎了现在怎么办好? 女生在接吻的时候应该怎么做啊??? 华为手机屏幕碎了,该怎么办 如何理解C语言中的字节数 女生该怎么和男生接吻 华为手机屏幕碎了该怎么办修复 C语言中,字节数怎样算 女生在初吻时该怎么办?四个接吻技巧 华为手机屏幕碎了 当男生吻女生时女生应该怎么做 接吻时女孩子怎么配合,怎么吻 C语言内存中占字节数如下定义 接吻时女生该怎么做 C语言 vfp word excel 字节数是? 一个数字在C语言中是多少个字节? 请教和男朋友接吻时,女生需要做些什么吗? 女生该怎么接吻 请问女生应该怎么回应舌吻啊 在接吻时,女生该怎样配合男生? 电脑可以多插几个内存条吗?谢谢了,大神帮忙啊 关于电脑想多插一根内存的问题 关于电脑想多插一根内存的问题 品牌电脑可以多插一个内存条吗? 两岁半孩子,脾气大,性子急,有时撞头,有什么好的教育方法? 我想给电脑多插一个内存条,应该注意什么? 宝宝一生气就撞头,暗示性格问题还是身体不适呢? 【内存】一个电脑最多可以插几个内存条---? 电脑装多一条内存条有什么好处 两岁半的孩子发脾气的时候经常撞击头,这是为什么? 电脑上多插一个内存条,怎么设置可以让电脑更快一些 孩子是因为性格问题还是身体不适,才会生气的时候就撞头? 多插几个内存条可以扩大电脑的内存吗? 电脑能多加内存条吗?