基础 - 结构体大小计算
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
基础 - 结构体大小计算相关推荐
- 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法
结构体大小的计算往往是面试笔试常考的知识.对于简单的结构体,可以一眼看出来,对于复杂的结构体,该如何计算结构体占用内存的大小呢? 本文学习所使用的编译器是gcc 4.4.5 使用其他编译器或者使用Wi ...
- 结构体大小计算与位域大小计算
结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...
- C语言sizeof结构体大小计算
一.一般类型 约定为32位系统,即char 1字节.short 2字节.int 4字节,指针是地址4个字节 定义:偏移量 偏移量指的是结构体变量中成员的地址和结构体变量地址的差.结构体大小等于最后一个 ...
- 结构体大小计算之位域字段
类和结构可包含比整型类型占用更少存储空间的成员.这些成员被指定为位域.位域成员声明符规范的语法如下: 语法 declarator : constant-expression 下面的示例声明包含位域的结 ...
- c语言struct结构体大小计算
直入主题,要判断一个结构体所占的空间大小,大体来说分三步走: 1.先确定实际对齐单位,其由以下三个因素决定 1> CPU周期 WIN vs qt 默认8字节对齐 Linux 32位 默认4 ...
- C语言结构体大小计算
这篇文章来探讨一下C语言中,结构体占的内存大小如何计算. printf("str = %d", sizeof(struct str));//用这个方法来查看一个结构体的大小 我尝试 ...
- C语言结构体详解(结构体定义,使用,结构体大小等)
c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...
- 结构体大小及其位域问题(from:byr)
问题: struct mybitfields { unsigned short a : 4; unsigned short b : 5; unsigned short c : 7; ...
- 结构体大小如何计算?
以下内容摘自此处: 作者:太平小小草 链接:https://www.jianshu.com/p/e772fff47465 来源:简书 结构体大小计算有三个原则: 一,结构体变量的首地址,必须是结构体 ...
最新文章
- restful可以转发么_DRF使用超链接API实现真正RESTful
- python注解实现原理_Python3注解+可变参数实现
- 如何手动的用jigloo设计器关联java界面文件 jigloo 设计器失去关联解决
- sniffer 和 debug flow
- java 并列排名,178. 分数排名
- python 内存分析_python内存管理分析
- djpython教程_简单介绍Python的Django框架的dj-scaffold项目
- Fibonacci思想的灵活应用(洛谷P1011题题解,Java语言描述)
- jeecgboot logback-spring.xml配置不生成新日志文件
- haproxy acl访问限制IP
- hibernate示例_Hibernate条件示例教程
- java运行matlab代码
- Django book 2.0
- python连接服务器执行命令进行部署
- RT-Thread的STM32系列外设驱动添加 ---- 以PWM外设为例
- 库存成本计算方法简介
- drop_caches 释放哪些
- 荐书 | 心理学如何编程,看看这9本书
- 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组 例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃,A
- python 格林威治时间转换为标准时间格式
热门文章
- AsyncTask的用法
- 记事本贪吃蛇游戏代码_厉害了,程序员28行代码写贪吃蛇游戏,附源码!
- python输出指定字符串_Python输出指定字符串的方法
- 分度值1g是什么意思_都什么年代了,还有人在 MySQL 索引上碰一鼻子灰?
- 钉钉微应用怎么进入_钉钉微应用开发免登流程
- 服务器网卡显示100m,千兆网线8根线都通了怎么还是显示100M,网卡都是能用1000M的...
- log4j 调试时候配置
- 校园宿舍管理系统课程设计报告
- python while循环和双重循环
- 阶跃函数卷积自己_如何看待大神/老师说“阶跃响应曲线调参并不准确”的观点?...