博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struct变量存储
阅读量:6886 次
发布时间:2019-06-27

本文共 1153 字,大约阅读时间需要 3 分钟。

在没有#pragma pack宏的情况下,结构体中的变量存储遵循以下对齐原则:

原则一:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从其自身大小的整数倍开始。

原则二:结构体的总大小,也就是sizeof的结果,必须是其内部最大数据成员的整数倍,不足的要补齐。

原则三:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大数据成员大小的整数倍地址开始存储。

上面提到的“数据成员”均指基本数据类型。

#include
struct A{ char c; int i; short s; };struct B{ int i; char c; short s; };struct C{ char c; struct B b;};int main(){ printf("sizeof(char)=%d\n",sizeof(char)); printf("sizeof(short)=%d\n",sizeof(short)); printf("sizeof(int)=%d\n",sizeof(int)); printf("sizeof(long)=%d\n",sizeof(long)); printf("sizeof(float)=%d\n",sizeof(float)); printf("sizeof(double)=%d\n",sizeof(double)); printf("sizeof(struct A)=%d\n",sizeof(struct A)); printf("sizeof(struct B)=%d\n",sizeof(struct B)); printf("sizeof(struct C)=%d\n",sizeof(struct C));}

sizeof(char)=1

sizeof(short)=2
sizeof(int)=4
sizeof(long)=4
sizeof(float)=4
sizeof(double)=8
sizeof(struct A)=12
sizeof(struct B)=8
sizeof(struct C)=12

struct A中char c放在0号位置,int i放在从4(4是sizeof(int)的整倍数)开始的位置,short s放在从8(8是sizeof(short)的整倍数)开始的位置,再根据原则二可得sizeof(struct A)=12。

struct B中int i放在从0开始的位置,char c放在从4开始的位置,short s放在从6开始的位置,所以sizeof(struct B)=8。

struct C中char c放在0号位置,b放在从4开始的位置。

转载地址:http://ovtbl.baihongyu.com/

你可能感兴趣的文章
计算机系统要素 C4
查看>>
Mysql存储引擎
查看>>
每看一次自己写的代码都有一种重写的冲动
查看>>
androidManifest.xml问题
查看>>
升级ubuntu后nginx无法启动
查看>>
inux多线程顺序控制的示例
查看>>
SQLServer 2016安装时的错误:Polybase要求安装Oracle JRE 7更新51或更高版本
查看>>
wkhtmtopdf--高分辨率转HTML成PDF(二)
查看>>
如何优雅的编写Dockerfile
查看>>
调试时显示数据防止乱码
查看>>
logback 日志输出级别设置
查看>>
直接插入法
查看>>
用户管理 新老用户的管理
查看>>
linux时间同步命令
查看>>
书法家程序员往往是公司最不受欢迎的程序员
查看>>
关于文件操作集锦 delphi
查看>>
mysqldump备份还原和mysqldump导入导出语句大全详解 转
查看>>
WAMP 隐藏服务器信息
查看>>
【APP打开小程序】
查看>>
CentOS7.1配置Ceph集群环境
查看>>