结构体大小的判断

原创 2016年08月30日 19:32:04

首先记清楚下图

 32 位和 64 位C数据类型

32和64位C语言内置数据类型,如下表所示:

32位和64位系统的区别在于long和指针,32位下他们是4字节,64位下他们是8字节

short都是2字节,float都是4字节,double都是8字节,longlong都是8字节


遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)

 二、结构体大小必须是所有成员大小的整数倍。

tructA{
 longa1;
 shorta2;
 inta3;
 int*a4;
};



例如求上面这个结构体A的sizeof大小,在64位下


a1的偏移量为0,长度为8

a2的偏移量为0+8=8,长度为2

a3的偏移量为8+2=10,不符合int长度4的倍数,故偏移量变成12,,长度为4

a4的偏移量为12+4=16,长度为8

故总大小为16+8=24,24是所有成员大小的整数倍,故A的大小为24


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

利用宏定义在编译阶段检查结构体大小的方法

http://blog.csdn.net/crazycoder8848/article/details/8292770 ===================================...
  • dadoneo
  • dadoneo
  • 2013年04月07日 12:24
  • 2318

结构体大小的判断

编译器在编译程序时会遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) 二、结构体大小必须是所有成员大小的整数倍。...
  • u013785331
  • u013785331
  • 2014年04月03日 18:59
  • 605

联合体结构体类型大小判断

根据现有的各种资料,C/C++中联合体类型在内存中的大小默认以最长的为准,并以长度最长的类型对齐。 按照上述原则 union A{     int a[5];     char b;     doub...
  • Yahu_Gao
  • Yahu_Gao
  • 2016年11月15日 21:30
  • 642

C语言结构体大小计算

定义结构体中的偏移量 结构体中的偏移量是一个成员的实际地址和结构体首地址之间的距离。 结构体大小计算 结构体大小 会涉及到字节对齐(目的是 让计算机快速读写 以空间换取时间)。即,最后一个成...
  • u012807459
  • u012807459
  • 2015年09月18日 13:08
  • 3037

C中结构体大小的计算

最近研究了一下c语言中结构体大小的计算,根据自己的理解以及参考网上的资料, 想做一点总结。    先介绍一个相关的概念——偏移量。偏移量指的是结构体变量中成员的地址和结构体 变量地址的差。结构体...
  • mdx20072419
  • mdx20072419
  • 2012年10月18日 16:26
  • 3872

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

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

[C/C++]结构体大小的计算方法

通常情况下,由于地址对齐(alignment)的需要,结构体各成员之间或结构体的尾部需要添补一些空白字节(padding),因而结构体的大小并不一定等于各成员大小之和。包含相同成员的结构体,如果成员声...
  • u010323664
  • u010323664
  • 2013年07月05日 11:57
  • 814

关于嵌套结构体大小的计算

先看下面的代码: #include using namespace std; struct ss1{ int a; double b; ...
  • u014351125
  • u014351125
  • 2016年11月10日 17:15
  • 478

【C++】计算struct结构体占用的长度

关于结构体和类所占用的长度计算方式介绍。 struct A { char a[5]; int b; short int c; }structA; 在上例中,要计算 size...
  • nisxiya
  • nisxiya
  • 2014年03月29日 02:21
  • 2135
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:结构体大小的判断
举报原因:
原因补充:

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