C语言中结构体struct怎么对齐
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍"C语言中结构体struct怎么对齐",在日常操作中,相信很多人在C语言中结构体struct怎么对齐问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言
千家信息网最后更新 2025年02月02日C语言中结构体struct怎么对齐
这篇文章主要介绍"C语言中结构体struct怎么对齐",在日常操作中,相信很多人在C语言中结构体struct怎么对齐问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言中结构体struct怎么对齐"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
struct,相互关联的元素的集合,每个元素都有自己的内存空间;每个元素在内存中的存放是有先后顺序的,就是定义时候的顺序;一个struct所占的总的内存大小,并不是各个元素所占空间之和,而是存在字节对齐的问题.
struct中的每个元素相对于结构体的首地址的偏移量能被该元素的size整除(某些编译器,如果该元素的size > 4,则偏移量能被4整除即可).
测试代码:
[xdb@localhost test]$ cat test.cpp#include#include using namespace std;#define LL long long struct E1 { int a; char b; char c;}e1;struct E2 { char b; int a; char c;}e2;struct E3 { char a; short b; int c; LL d;}e3;struct E4 { int c; LL d; char a; short b;}e4;struct E5 { char a1,a2,a3,a4,a5,a6;}e5;struct E6 { char a1,a2,a3;}e6;struct E7 { struct E5 elem5; struct E6 elem6; LL a;}e7;struct E8 { char a[9];}e8;struct E9 { struct E8 elem8; LL a;}e9;struct E10 { char a;};int main() { puts("----> E1"); cout << sizeof(E1) << endl; printf("%x %x %x %x\n", &e1, &e1.a, &e1.b, &e1.c); puts("----> E2"); cout << sizeof(E2) << endl; printf("%x %x %x %x\n", &e2, &e2.b, &e2.a, &e2.c); puts("----> E3"); cout << sizeof(E3) << endl; printf("%x %x %x %x %x\n", &e3, &e3.a, &e3.b, &e3.c, &e3.d); puts("----> E4"); cout << sizeof(E4) << endl; printf("%x %x %x %x %x\n", &e4, &e4.c, &e4.d, &e4.a, &e4.b); puts("----> E5"); cout << sizeof(E5) << endl; puts("----> E6"); cout << sizeof(E6) << endl; puts("----> E7"); cout << sizeof(E7) << endl; printf("%x %x %x %x\n", &e7, &e7.elem5, &e7.elem6, &e7.a); puts("----> E8"); cout << sizeof(E8) << endl; puts("----> E9"); cout << sizeof(E9) << endl; printf("%x %x %x\n", &e9, &e9.elem8, &e9.a); puts("----> E10"); cout << sizeof(E10) << endl; return 0;}[xdb@localhost test]$
编译,执行
[xdb@localhost test]$ g++ test.cpp -o test[xdb@localhost test]$ ./test----> E186021a0 6021a0 6021a4 6021a5----> E2126021a8 6021a8 6021ac 6021b0----> E3166021c0 6021c0 6021c2 6021c4 6021c8----> E4246021d0 6021d0 6021d8 6021e0 6021e2----> E56----> E63----> E724602200 602200 602206 602210----> E89----> E924602230 602230 602240----> E101[xdb@localhost test]$
到此,关于"C语言中结构体struct怎么对齐"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
元素
结构
语言
学习
内存
更多
空间
问题
顺序
量能
偏移
帮助
编译
实用
接下来
之和
代码
先后
地址
大小
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
战地1一进服务器就连接失败
雪球服务器卡
定制软件开发二次开发费用
ssm出现对软件开发的影响
关于网络安全利与弊的手抄报
2022网络安全市场份额占比
华为网络技术工程师面经
数据库中连接关系有哪三种
共享软件开发有限公司
青岛ios软件开发哪家做的好
华为云软件开发云下载
汽车网络安全的灵魂
网络技术指导用书答案
rds数据库如何限流
联想服务器部署ovirt
数据库应用习题解答
软件开发合同里的责任
论网络安全面临的威胁
同盾科技共建互联网实验室
深圳口碑好的网络技术服务费
goip设备是服务器吗
模拟城市服务器连接中断
招商银行软件开发招聘信息
网络技术自己的不足
企业做一个网站需要配什么服务器
方舟服务器出租
京东软件开发本科待遇
网络安全教育平台网
网络安全抵制邪教
魔兽数据库 军团再临