C语言优化学习——结构体定义优化

转载 2015年11月17日 16:17:22

原文链接 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个字节就在这里。

结构体的大小的计算与空间的优化--之基本类型

结构体对齐 对齐 结构体大小 结构体大小如何最小 结构体大小如何优化 结构体空间的优化...
  • yygydjkthh
  • yygydjkthh
  • 2013年09月20日 19:17
  • 2209

结构体成员的内存分布与对齐

我们先看一道IBM和微软的笔试题: IBM笔试题: struct{  short   a1; short   a2;  short   a3;  }A;  struct{  long...
  • bbs598598
  • bbs598598
  • 2012年03月21日 10:20
  • 9902

gcc结构体对齐的误用

最近对一段声卡裸板程序进行调试时发现了一个结构体对齐误用的错误。在接有wm8976的s3c2440开发板上调试裸板程序,用来解析并播放NandFlash上的wav二进制数据,使用dma传输数据到iis...
  • yjfreedom
  • yjfreedom
  • 2016年02月19日 15:00
  • 710

C语言结构体对齐与不对齐设置总结

参考: 相信不同的编译平台间的默认设置差异给大家带来了很多困扰。在此,仅就结构体对齐解析下之间的差异设置方法。 1.gcc中结构体默认是4个字节对齐,即为32的倍数。 1.1修改字节...
  • gll028
  • gll028
  • 2014年10月08日 17:33
  • 2762

Android性能优化(一)——数据结构优化

数据结构优化,使用Sparsearray 替换HashMap 资料: Android应用性能优化之使用SparseArray替代HashMap Android中的稀疏数组:SparseArray...
  • watermusicyes
  • watermusicyes
  • 2015年05月19日 07:39
  • 1903

数据库数据结构优化

1、基本表扩展   数据库性能包括存储空间需求量的大小和查询响应时间的长短两个方面。为了优化数据库性能,需要对数据库中的表进行规范化。一般来说,逻辑数据库设计满足第三范式的表结构容易维护且基...
  • a236209186
  • a236209186
  • 2016年07月28日 10:37
  • 129

C语言中定义结构体的几种方法

结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下: 1) 先定义结构体类型,再定...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2013年09月21日 12:11
  • 22888

C语言深度解剖之——for循环优化

转载:点击打开链接 作者:chen825919148 1.8.2,循环语句的注意点 【建议1-27】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU...
  • u011580175
  • u011580175
  • 2017年02月06日 18:07
  • 387

SQL查询优化——数据结构设计

数据库设计及使用是WEB开发程序员必备的一项基础技能,在大数据量和高并发场景,合理的数据结构及SQL查询优化对项目来说都会显得格外重要。大部分有经验的程序员都能了解到,程序的瓶颈往往不在程序本身,而在...
  • huyanping
  • huyanping
  • 2014年10月06日 16:51
  • 9307

C代码优化方案1、选择合适的算法和数据结构__ 4 2、使用尽量小的数据类型__ 5

  • 2008年09月27日 13:17
  • 25KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言优化学习——结构体定义优化
举报原因:
原因补充:

(最多只允许输入30个字)