如何c语言看字节大小,如何计算C语言结构占用的字节数

本文介绍了C语言中结构体占用字节数的计算原理,通过三种不同格式的结构体实例,解释了内存布局和字节对齐的影响。第一种格式浪费空间,第二种在空间和字段类型保持间取得平衡,第三种则最节省空间但牺牲了字段的数据类型。理解这些差异有助于合理选择结构体定义方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2-810-jpg_6-1080-0-0-1080.jpg

全部展开

结构的数据类型很多. 我们不会一long而就. 让我们直接看一下相同数据结构的几种书写格式.

格式一:

01.struct tagPhone

02.{

03.     char   A;

04.     int    B;

05.     short  C;

06.}Phone;

格式二:

00243772.jpg

01.struct tagPhone

02.{

03.     char   A;

04.     short  C;

05.     int    B;

06.}Phone2;

格式3:

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个字节)来犯错. 这是错误的.

i_3_3691943704x337553723_15.jpg

以下是简要分析:

在计算结构大小时需要考虑内存布局. 该结构按单位存储在内存中,每个单位的大小取决于该结构中最大的基本类型的大小.

对于格式一:

7c66e969d04381f86dae8a9361d6c807.png

int类型取4的整数倍,因为A占用一个字节后,B无法放置,因此打开一个新单元,然后打开一个新单元放入C,因此被占用的字节数格式之一是: 3 * 4 = 12;

11-810-jpg_6-1080-0-0-1080.jpg

类似地,对于第二种晶格e68a84e8a2ade799bee5baa6e997aee7ad9431333337616465c 计算结构体大小,

1d9e2829695a56fbb0de0226a665434e.png

A后面有三个字节,足以存储C,因此C在A之后存储,然后打开一个新单元来存储B数据. 因此,格式2占用的内存字节为2 * 4 = 8.

对于格式三:

cf6e2ab8b2779692f910d77a2b5b45dc.png

91a193160e0d694515bcf08e9c6d4878.png

计算上述结构的大小,sizeof(Phone3)= 1 + 2 + 4 = 7,其大小是结构中字段大小的总和,这也是节省空间最多的方法写.

摘要:

第一种书写方式是空间被严重浪费. sizeof的sizeof计算与期望值不一致,但是保留了每个字段的数据类型. 这也是随便写作的最常见方式,对于大多数人来说,这样写很容易;

第三种写方法,也是最节省空间的写方法,也是使用sizeof查找与预期大小相同的大小c 计算结构体大小,但是所有写方法都使用字节类型,从而丢失了字段的本机数据类型,使用起来很不方便;

在第一和第三种书写方式之间的第二种书写方式在空间上更紧凑,同时保持了结构中字段的数据类型.

只要您了解这些著作的不同之处,就可以适当选择.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-214511-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值