C语言优化学习——结构体定义优化
来源:互联网 发布:java中ant怎么用 编辑:程序博客网 时间:2024/06/14 13:53
原文链接 http://blog.csdn.net/fb2058/article/details/15502071
编译器 VS2013
在这之前需要知道各种数据类型占用的字节数
char—1个 short—2个 Int—4个 float—4个 long—4个 double—8个
首先定义两个结构体 A 和 B,A和B里面的数据是一样的,不同的是数据顺序不一样。
typedef struct{char a;short c;int b;}A;typedef struct{char a;int b;short c;}B;
主程序
printf("结构体A占用字节:%d字节\n结构体B占用字节:%d字节\n",sizeof(A),sizeof(B));
很多人认为这两个结构体所占用的字节数应该是一样的(1+2+4=7),实际上不是的。
实际运行结果
看到这里可能很多人就有疑问了,为什么会这样呢,两者相差的4个字节在哪呢,下面详细解释。
需要注意的是结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小。
对于结构体A和B来说最大基本类型是Int,也就是单元大小为4个字节。
先来计算结构体A占用的字节数
因为a只占用一个字节,所以第一个单元放完a后还剩3个字节,而c只占2个字节,所以c紧接着放在a后面;放完a,c之后第一个单元还剩1个字节,放不下b了,另外再开辟一个单元放b。最终结构体A所占的字节为 4+4 = 8 字节
再来计算结构体B占用的字节数
因为a只占用一个字节,所以第一个单元放完a后还剩3个字节,而b要占4个字节,第一个单元不够放,所以另外开辟一个单元放b,第二个单元用完了,另外开辟一个单元放c。最终结构体B所占的字节为 4+4+4 = 12 字节
所以结构体B比A多出来的4个字节就在这里。
0 0
- C语言优化学习——结构体定义优化
- C语言小问题之——结构体定义
- C语言结构体定义
- C语言结构体定义
- C语言常规优化策略——参数传递、宏定义、全局变量与汇编
- C语言学习-struct结构体定义你自己的数据类型
- C语言学习——结构体
- C语言结构体—学习笔记
- C语言常规优化策略——循环优化
- 大话C语言——分支优化
- C语言之结构体和共同体——结构体的定义和使用
- C语言结构体定义、赋值举例
- C语言结构体数组的定义
- c语言结构体定义以及引用
- C语言结构体该如何定义?
- C语言结构体 别名定义
- C 语言结构体定义 使用
- C语言结构体别名定义问题
- Installing PHP and the Oracle Instant Client for Linux and Windows For PHP 5.5, OCI8 2.0 and Oracle
- modelsim输入信号
- SIFT算法C语言逐步实现详解(上)
- TListView 列宽自适应大小
- Dialog全屏显示
- C语言优化学习——结构体定义优化
- MongoDB小结10 - update【upsert】
- Android热更新实现原理
- Android 中即时聊天或者后台任务需要发送消息的一种解决方案.
- vbox+linux+rac11gR2安装
- 基于mini2440 的 bootloader 设计 ---- 8、NandFlash 初始化
- C语言1.用选择法对10个整数排序。10个整数用scanf函数输入。
- iOS –app微信支付
- python自省函数的总结(源码剖析)