其他:

1.数组下标可为负:a[-1]  相当于  a+(-1);

2.联合体大小就是成员中最大类型的大小;

如何计算一个结构体的大小?

例如:

struct Test{

int Num;

char *name;//指针大小取决于编译器的位数  ,64位  为:8字节     32位为:4字节

short date;

char ch;

}*p;

总结计算大小规则:

1.其大小也与成员顺序有关系,因为前一个成员地址需要与下一个成员地址构成需要满足地址对齐,即当前所占字节数需为当前编译器宽度的整数倍

如以上结构体(假设编译器为64位):int   num  占4字节,下一成员char * name 占用8字节

首先4+8=12>8,即编译器宽度(即指针所占大小:8)存放不下,故第一个成员补全为编译器宽度为8字节,(需保持和下一成员地址对齐,如果当前几个数据成员地址实现对齐,则从下一个成员为起点再重复以上规则))

接下来:short  date 占用2字节,char ch 占用1字节     2+1=3字节,一个地址宽度能放下,但8+8+3=19不是8的倍数,故需要补齐,其实就是再补5个字节,故此结构体大小为:24字节

注意:如何补?补几个字节,取决于编译器宽度,和其中占用内存大小最大的成员,如过超过编译器宽度,以其数据成员所占内存大小为对齐基准,否则补齐到编译器宽度即可

  • 再举个例子:
struct Test{//int Num;//char *name;//指针大小取决于编译器的位数  ,64位  为:8字节     32位为:4字节short date;char ch;}*p;

以上结构体多大呢?  答案:4字节 (没有达到编译器宽度,以最大成员对齐)

再来个例子:

struct Test{
int Num;char *name;//指针大小取决于编译器的位数  ,64位  为:8字节     32位为:4字节short date;char ch;
int ch1;
//char k;
}TEST;

答案:24  每对其一次,从当前开始对齐,小于编译器宽度以当前 最大元素对齐

8: 4+补齐4

8:8(4+8=12 >8,但不是8倍数,故上面元素需补齐4)

8:2+1+补齐1  + 4

总和:刚好24 不用再补齐

详细解释如何计算一个结构体的大小?相关推荐

  1. 如何判断一个结构体的大小

    对于嵌入式系统来说,内存很宝贵,那么在编程的时候就要尽量使自己用的数据结构所用的内存少,而结构体是C编程中经常用到的结构,保证结构体大小尽量的合理是很重要的.下面说一下如何判断一个结构体的大小. 首先 ...

  2. 结构体的大小如何计算?

    看了一些博客上关于结构体计算的讲法,有些没讲全面,有些根本就是错误的,可能作者本人都没意识到自己错了,我总结一下加深印象. 查看全文 http://www.taodudu.cc/news/show-7 ...

  3. 【C语言】一文搞定如何计算结构体的大小----结构体内存对齐规则

    要搞定如何正确地计算一个结构体的大小,我们就要深刻理解结构体内存对齐规则: 结构体内存对齐规则: 1.结构体的第一个成员永远在结构体起始位置偏移量为0的位置: 2.结构体成员从第二个成员开始,总是放在 ...

  4. C语言 如何计算结构体的大小

    无嵌套结构体的大小计算 如何计算结构体的大小? 由于存储变量地址对齐的问题,计算结构体大小的3条规则: 1.结构体变量的首地址,必须是结构体变量中的"最大基本数据类型成员所占字节数" ...

  5. 如何计算结构体的大小(四步轻松解决)

    我们都知道,利用sizeof可以直接计算得出,那么具体是如何得出这些答案的呢,我将通过代码和四步规则法结合来做演示,如下述代码所示: #include<stdio.h> typedef s ...

  6. 结构体的大小该如何计算?

    1. 第一个成员在与结构体变量偏移量为 0 的地址处. 2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处. 对齐数 = 编译器默认的一个对齐数 与 该成员大小的 较小值 . VS 中默认的 ...

  7. 结构体的大小如何计算

    我们实际生活中,保存的数据一般不会是同一种类型,所以引入了结构体.而结构体的大小也不是成员类型大小的简单相加.需要考虑到系统在存储结构体变量时的地址对齐问题. 由于存储变量地址对齐的问题,结构体大小计 ...

  8. 第10章结构体01——结构体字节大小的计算

    1.该篇笔记详见C提高笔记(传智播客) 文章目录 博文01:(常考面试题) 三步解决C语言中struct字节对齐问题,结构体的字节大小问题 第1步.先确定结构体实际对齐单位, 第2步.除结构体的第一个 ...

  9. 结构体PLUS(计算结构体类型大小及位段)~~

    如何计算结构体类型大小呢? 1. 结构体内存对齐 为什么要内存对齐呢? 2.修改默认对齐数 3.位段 什么是位段 位段的内存分配 位段的跨平台问题 位段的应用 关于结构体类型,之前阿涛写过一篇文章,里 ...

最新文章

  1. Java正则表达式--Matcher.group函数的用法
  2. Oracle 数据库常用操作语句大全
  3. 那些在家啃书自学的人,最后都找到工作了吗?
  4. 浅析epoll – epoll函数深入讲解
  5. 解决Pytohn安装第三方库出现read timed out 问题
  6. 研究Java 9 Money and Currency API(JSR 354)
  7. nyoj239 月老的难题 二分图 匈牙利算法
  8. 解决压缩包跨平台解压缩的中文乱码问题
  9. C++/C--动态二维数组的内存分配与释放【转载】
  10. 独自封装windows 10系统教程(全)
  11. 一次破解TP-Link WAR308路由器的经历(2)
  12. 泛函分析 04.05 有界线性算子 - 闭算子与闭图像定理
  13. 分布式机器学习(一)之总体概述
  14. 【题解:洛谷4186||USACO18JAN Cow at Large G】
  15. 小学生遭校长拳击内脏出血 求医救命钱遭抢(图)
  16. 益智java单词游戏_java实现单词搜索迷宫游戏
  17. 吴恩达 深度学习 序列模型 第一周 编程作业二 字符级别语言模型项目 总结
  18. 数据挖掘十大经典算法,你都知道哪些?
  19. 手把手教你如何绘制一辆,“单身自行车”,哈哈哈!
  20. Android Binder机制浅析及AIDL的使用

热门文章

  1. 《0bug》一书给谁带来了奶酪?
  2. 2021年升降机司机考试及升降机司机模拟考试题
  3. 状态估计2(卡尔曼滤波)
  4. 匈牙利算法Hungarian algorithm
  5. 王亚卿任京东商城首任CTO
  6. Java FX swt_DOC-13-08 JavaFX与SWT的协作性
  7. 清除WebSphere中jsp缓存
  8. 怎么查oracle ocm证书,Oracle OCM认证
  9. win10 怎么删除多余的系统引导
  10. 多益网络人工智能面试和入职问题