格式1

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

格式2

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个字节。这是错的。

  以下我们简单分析下:

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

  对格式一:

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

  同理对于格式二,

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

  

  对于格式三:

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

  

  总结:

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

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

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

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

C语言结构体struck所占用的字节数如何计算相关推荐

  1. C语言结构体及函数传递数组參数演示样例

    C语言结构体及函数传递数组參数演示样例 注:makeSphere()函数返回Sphere结构体,main函数中.调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针. post ...

  2. 结构体所占内存的字节数——内存对齐

    1.什么是内存对齐? 下面先来看一个例子: #include <stdio.h> int main() {struct Text1{char c1;short s; char c2;int ...

  3. C语言结构体与共用体(上篇) CSDN 花神生涯

    文章目录 结构体类型的定义 结构体变量的定义 结构体变量成员的引用和赋值 结构体变量的初始化 结构体内存对齐 指向结构体变量的指针 指向结构体数组的指针 结构体传参 结构体类型的定义 结构是一些值的集 ...

  4. C语言结构体占用内存总结

    C语言结构体占用内存总结 前几天有个小朋友问了我一下,关于C语言结构体占用空间的问题.觉得以后会对小可爱有点帮助,就打算先写一下. struct Test {int a;char b;int c; } ...

  5. c语言结构体变量所占字节计算,【C语言】结构体占用字节数及存储与空间分配...

    我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等. 在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取 ...

  6. ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据

    前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...

  7. 深入解析JNA—模拟C语言结构体

    原帖:http://blog.csdn.net/shendl/article/details/3599849 深入解析JNA-模拟C语言结构体 前言 前几天写<JNA--JNI终结者>一文 ...

  8. c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)

    来源:网络,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.结构体和其他类型基础数 ...

  9. C语言结构体字节对齐

      默认字节对齐 C语言结构体字节对齐是老生常谈的问题了,也是高频面试题,现在我们来深入研究这个问题,彻底弄懂到底是怎么回事,给你一个结构体定义和平台机器位数就能手动计算出结构体占用字节数,现在我们不 ...

  10. c语言 结构体_颖儿教你学C语言结构体,全面讲解,让程序小白玩转结构体编程...

    C语言结构体详细教学开始 前面的教程中我们讲解了数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号 ...

最新文章

  1. 数据库命名规范(转)
  2. asp还有人用吗_中药都安全吗?服用这些中药需要注意
  3. PX4代码解析(4)
  4. 如何用手机打开dcm格式图片_实现原始Dicom自动转换BIDS格式 ——Heudiconv
  5. android颜色表
  6. JSP — request 内置对象
  7. 〖Linux〗以后台方式启动/结束指定程序/命令(不受 exit 或点击窗口关闭按钮等终端退出操作的影响)...
  8. 一次性掌握计算机中常见的六类指令
  9. 凯撒密码matlab转换,教你如何简单使用凯撒密码 详细始末
  10. WebStorm开发插件
  11. python在线问卷调查系统源代码_基于Java Web的在线问卷调查系统 源码下载
  12. Java工作流有哪些?如何快速掌握Java技术
  13. 学好机器学习需要哪些数学知识?
  14. 全民学霸服务器在维护中需要多久,《全民学霸》学生系统详解,成就学霸之路...
  15. js问号点的作用(?.)和问号问号(??)的用法
  16. 事业单位考试计算机专业知识题库,计算机考试题库:计算机考试模拟练习题(201)...
  17. STM32F103c8t6点灯
  18. 阿里云科技驱动“数字化转型”,助力中小企业发展“突围”
  19. CentOS7 安装cellranger-4.0.0
  20. 内容对齐 TextAlignment VerticalAlignment HorizontalAlignment contentMode

热门文章

  1. 智慧海洋task04 利用数据进行建模并调参
  2. KK(凯文·凯利) 给年轻人的68条建议
  3. 移动端切图内容包括什么_移动端切图备忘
  4. tftpd32服务器软件在Windows与linux 下的文件传输
  5. 融资租赁、直租回租傻傻分不清楚
  6. python的key函数_由 sort 中 key 的用法浅谈 python
  7. 基于STM32C8T6的MLX90614-DCC红外无线测温系统
  8. 2020手机cpu天梯图
  9. I love you
  10. 调用百度api出现的跨域问题