关于C语言中结构体对齐问题
来源:互联网 发布:360浏览器注入js 编辑:程序博客网 时间:2024/05/21 21:39
嵌入式C语言之struct内存分配(对齐)
为了提高CPU的存储速度,对一些变量的起始地址做了“对齐”处理。在默认情况下,规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。
#pragma pack(n)作用:来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;否则必须为n的倍数。
注:对于结构体中包含其他结构体时,按结构体大小计算,对应结构体中包含数组,用数组类型计算。
例题:
#include <stdio.h>#pragma pack(push)#pragma pack(8)struct mystr{ int b; double a; int c;};struct test{ int a; struct mystr s1; double b; int c;};struct my { char name[10]; char a; int b;};int main(){ printf("sizeof(mystr) = %d\n",sizeof(struct mystr)); printf("sizeof(test) = %d\n",sizeof(struct test)); printf("sizeof(my) = %d\n",sizeof(struct my)); return 0;}
结果:
阅读全文
0 0
- 关于C语言中结构体字节对齐问题
- 关于C语言中结构体对齐问题
- C语言中结构体对齐问题
- C语言中结构体对齐问题
- C语言中结构体对齐问题
- C语言中结构体对齐问题
- 关于C语言中的结构体对齐问题
- 关于C语言中的结构体对齐问题
- 关于C语言中的结构体对齐问题
- 关于C语言中的结构体对齐问题
- 关于C语言中的结构体对齐问题
- 关于C语言结构体对齐问题的探讨
- C语言结构体中内存对齐问题
- C语言中结构体的内存对齐问题
- C语言中结构体对齐方式的问题
- 关于C语言中的结构体对齐
- 关于C语言中的结构体对齐
- 关于C语言中的结构体对齐。
- POJ 1637 Sightseeing tour (混合图欧拉路判定)(可以转化为最大流)
- 设计模版
- [ NYOJ
- Android基础_Xml的Pull解析/安卓中的数据库以及实例化数据库的第三方框架Litepal(五)
- HDU
- 关于C语言中结构体对齐问题
- struts2之拦截器
- 1416: Kick Ass Biu [几何]
- [深度学习之CNN] 之参考博客链接汇总(更新中)
- 学习笔记 二叉搜索树(BST)
- Android应用开发—TextView的动态创建
- 网桥,Bond与Team
- ros&c++遇到的坑(vector 引起segmentation fault )
- 快速搭建hadoop弱计算环境