1 // 结构体大小.cpp : 定义控制台应用程序的入口点。
  2 //
  3
  4 #include "stdafx.h"
  5 #include <windows.h>
  6 #include <iostream>
  7
  8 using namespace std;
  9
 10
 11 /*
 12 结构体计算要遵循字节对齐原则
 13
 14 结构体默认的字节对齐一般满足三个准则:
 15
 16 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
 17
 18 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
 19
 20 3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)
 21
 22 */
 23
 24
 25 typedef struct _S1_
 26 {
 27     char  a;
 28     short b;
 29     char  c;
 30 }S1;
 31 /*
 32 S1中,最大是short,2字节
 33 char->short->char
 34 char是一个字节,要对齐,附近又没有另外的char和他凑
 35 所以
 36 2
 37 2
 38 2
 39
 40
 41 第一个char占一个字节        多的这一个补0,只是占位作用
 42 short                   刚好占2个字节
 43 第二个char也占1个            多的这一个补0,只是占位作用
 44
 45
 46 一共6字节
 47
 48 */
 49
 50
 51
 52 typedef struct _S2_
 53 {
 54     char  a;
 55     char  b;
 56     short c;
 57 }S2;
 58 /*
 59 S1=2中,最大是short,2字节
 60 char->char->short
 61
 62 char是一个字节,要对齐,
 63 第一个char和第二个char正好凑成两个字节
 64
 65 第一个char占一个字节        第二个char也占1个
 66 short                   刚好占2个字节
 67
 68
 69 所以
 70 1 1
 71 2
 72
 73 即
 74 2
 75 2
 76
 77 一共4字节
 78
 79 */
 80
 81
 82
 83
 84 //同理S1、S2
 85 typedef struct _S3_
 86 {
 87     int  i;
 88     char c;
 89     int  j;
 90 }S3;
 91
 92
 93
 94 //同理S1、S2
 95 typedef struct _S4_
 96 {
 97     int  i;
 98     int  j;
 99     char c;
100 }S4;
101
102
103
104
105 typedef struct _A_
106 {
107     char      a1;
108     short int a2;
109     int       a3;
110     double     d;
111
112 }A;
113
114
115
116 typedef struct _B_
117 {
118     long int  b2;
119     short int b1;
120     A          a;
121
122 }B;
123 /*
124 当结构体成员变量是另外一个结构体时,只要把结构体中成员为另一结构体作为整体相加就行
125
126 对于B,先去掉A a
127 体B 算得 其为8,
128 所以最后结果为8+16=24;
129
130 */
131
132
133
134
135 int main()
136 {
137     cout << sizeof(S1) << endl;
138     cout << sizeof(S2) << endl;
139     cout << sizeof(S3) << endl;
140     cout << sizeof(S4) << endl;
141     cout << sizeof(A)  << endl;
142     cout << sizeof(B)  << endl;
143
144     return 0;
145 }

转载于:https://www.cnblogs.com/1228073191Blog/p/7448694.html

基础 - 结构体大小计算相关推荐

  1. 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法

    结构体大小的计算往往是面试笔试常考的知识.对于简单的结构体,可以一眼看出来,对于复杂的结构体,该如何计算结构体占用内存的大小呢? 本文学习所使用的编译器是gcc 4.4.5 使用其他编译器或者使用Wi ...

  2. 结构体大小计算与位域大小计算

    结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...

  3. C语言sizeof结构体大小计算

    一.一般类型 约定为32位系统,即char 1字节.short 2字节.int 4字节,指针是地址4个字节 定义:偏移量 偏移量指的是结构体变量中成员的地址和结构体变量地址的差.结构体大小等于最后一个 ...

  4. 结构体大小计算之位域字段

    类和结构可包含比整型类型占用更少存储空间的成员.这些成员被指定为位域.位域成员声明符规范的语法如下: 语法 declarator : constant-expression 下面的示例声明包含位域的结 ...

  5. c语言struct结构体大小计算

    直入主题,要判断一个结构体所占的空间大小,大体来说分三步走: 1.先确定实际对齐单位,其由以下三个因素决定 1> CPU周期 WIN  vs  qt  默认8字节对齐 Linux 32位 默认4 ...

  6. C语言结构体大小计算

    这篇文章来探讨一下C语言中,结构体占的内存大小如何计算. printf("str = %d", sizeof(struct str));//用这个方法来查看一个结构体的大小 我尝试 ...

  7. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  8. 结构体大小及其位域问题(from:byr)

    问题: struct mybitfields   {   unsigned short a : 4;   unsigned short b : 5;   unsigned short c : 7;   ...

  9. 结构体大小如何计算?

    以下内容摘自此处: 作者:太平小小草 链接:https://www.jianshu.com/p/e772fff47465 来源:简书 结构体大小计算有三个原则: 一,结构体变量的首地址,必须是结构体 ...

最新文章

  1. restful可以转发么_DRF使用超链接API实现真正RESTful
  2. python注解实现原理_Python3注解+可变参数实现
  3. 如何手动的用jigloo设计器关联java界面文件 jigloo 设计器失去关联解决
  4. sniffer 和 debug flow
  5. java 并列排名,178. 分数排名
  6. python 内存分析_python内存管理分析
  7. djpython教程_简单介绍Python的Django框架的dj-scaffold项目
  8. Fibonacci思想的灵活应用(洛谷P1011题题解,Java语言描述)
  9. jeecgboot logback-spring.xml配置不生成新日志文件
  10. haproxy acl访问限制IP
  11. hibernate示例_Hibernate条件示例教程
  12. java运行matlab代码
  13. Django book 2.0
  14. python连接服务器执行命令进行部署
  15. RT-Thread的STM32系列外设驱动添加 ---- 以PWM外设为例
  16. 库存成本计算方法简介
  17. drop_caches 释放哪些
  18. 荐书 | 心理学如何编程,看看这9本书
  19. 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组 例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃,A
  20. python 格林威治时间转换为标准时间格式

热门文章

  1. AsyncTask的用法
  2. 记事本贪吃蛇游戏代码_厉害了,程序员28行代码写贪吃蛇游戏,附源码!
  3. python输出指定字符串_Python输出指定字符串的方法
  4. 分度值1g是什么意思_都什么年代了,还有人在 MySQL 索引上碰一鼻子灰?
  5. 钉钉微应用怎么进入_钉钉微应用开发免登流程
  6. 服务器网卡显示100m,千兆网线8根线都通了怎么还是显示100M,网卡都是能用1000M的...
  7. log4j 调试时候配置
  8. 校园宿舍管理系统课程设计报告
  9. python while循环和双重循环
  10. 阶跃函数卷积自己_如何看待大神/老师说“阶跃响应曲线调参并不准确”的观点?...