如何判断一个结构体的大小
来源:互联网 发布:asp.net和python 编辑:程序博客网 时间:2024/05/03 16:53
对于嵌入式系统来说,内存很宝贵,那么在编程的时候就要尽量使自己用的数据结构所用的内存少,而结构体是C编程中经常用到的结构,保证结构体大小尽量的合理是很重要的。下面说一下如何判断一个结构体的大小。
首先需要了解总线宽度和自然边界这俩个概念,编译器在分配结构体时根据这俩个因素来计算偏移量和空间占用。
总线宽度:
总线宽度就是一个处理器访问周期最多可以访问多少位的数据。总线宽度分为BUS16,BUS32,BUS64。
自然边界:
每一个C的类型都有自然边界,如果某种类型数据所处地址是N的整数倍时访问效率最高,那么这种类型的自然边界就是数字N。
下面是C语言数据类型的大小和自然边界值:
C数据类型
大小
BUS16
BUS32/64
Char
1
1
short
2
2
Int
4
2
4
指针
4
2
4
long
4
2
4
bit
---
很整形一样
float
4
2
4
double
8
2
4/8
struct
--
和具有最大需要的数据成员一致
union
--
和具有组大的数据成员一致
对结构体而言,结构体的自然边界与最大的数据成员一致,也就是说结构体的大小就是元素的个数乘以最大成员的自然边界。其它元素中间需要填充字节。下面是几个例子,都是对于BUS32说的,BUS16和64都对照表就行了:
struct simple{char a;`//它的自然边界就是int的自然边界,所以它的大小为12.int b; //它的结构是这样的:{a000bbbbc000},每一个字母代表一个字节,0代表填充字节char c;};struct outer{char x;<span style="white-space:pre"></span><span style="font-family: Arial, Helvetica, sans-serif;">//simple的自然边界是4,所以char也要填充数据,大小为16</span>struct simple y; //{x000{a000bbbbc000}}};struct point<span style="white-space:pre"></span>//自然边界是double,4,大小为20,{c000xxxxxxxxyyyyyyyy}{char c;double x,y;};注意自然边界不都是等于该数据类型的大小。
#include <stdio.h>struct simple{char a;int b;char c;};struct outer{char x;struct simple y;};struct point{char c;double x,y;};int main(){struct simple vect[2];//printf("%d\n",sizeof(struct simple));//printf("%d\n",sizeof(vect));//printf("%d\n",sizeof(struct outer));printf("%d\n",sizeof(struct point));return 0;}写个小程序测试一下对不对。
0 0
- 如何判断一个结构体的大小
- 结构体大小的判断
- 结构体大小的判断
- 如何在编译时获取一个结构体的大小
- 结构体大小判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- struct 结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof进行结构体大小的判断
- sizeof结构体大小的判断
- sizeof进行结构体大小的判断
- HDOJ 5417 Victor and Machine 水
- IOS UI TextFiled常用总结
- 线性表之顺序表的性能分析
- 时间复杂度为m+n,的一种模式匹配,适合子串不是很长的匹配
- 生成树协议
- 如何判断一个结构体的大小
- CRect类的介绍(转载)
- 黑马程序员--OC之内存管理
- JAVA内部类、多态、final的联系
- CodeForces 546C Soldier and Cards(数据结构模拟)
- android studio升级到23.0产生的问题s
- Android笔记二
- 新的开始
- C语言选择菜单的试手程序!