文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言中结构体struct怎么对齐

2024-04-02 19:55

关注

这篇文章主要介绍“C语言中结构体struct怎么对齐”,在日常操作中,相信很多人在C语言中结构体struct怎么对齐问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中结构体struct怎么对齐”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

struct,相互关联的元素的集合,每个元素都有自己的内存空间;每个元素在内存中的存放是有先后顺序的,就是定义时候的顺序;一个struct所占的总的内存大小,并不是各个元素所占空间之和,而是存在字节对齐的问题.
struct中的每个元素相对于结构体的首地址的偏移量能被该元素的size整除(某些编译器,如果该元素的size > 4,则偏移量能被4整除即可).
测试代码:

[xdb@localhost test]$ cat test.cpp
#include <cstdio>
#include <iostream>
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
----> E1
8
6021a0 6021a0 6021a4 6021a5
----> E2
12
6021a8 6021a8 6021ac 6021b0
----> E3
16
6021c0 6021c0 6021c2 6021c4 6021c8
----> E4
24
6021d0 6021d0 6021d8 6021e0 6021e2
----> E5
6
----> E6
3
----> E7
24
602200 602200 602206 602210
----> E8
9
----> E9
24
602230 602230 602240
----> E10
1
[xdb@localhost test]$

到此,关于“C语言中结构体struct怎么对齐”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯