结构体内存对齐

结构体内存对齐有两大规则

规则1:结构中的元素都是按照定义一个一个按顺序放到内存中去的,但不是紧密存储的。从结构体的起始位置开始,在每个元素放到内存的时候他们各自认为前面的元素都是按照自己的大小来划分的,因此位置一定是从自己大小的整数倍上开始的。(以结构体的起始位置从0开始)
规则2:在规则1的基础上,结构体的总大小是其中所有元素中宽度最大的整数倍,不够要补齐。

tpedef struct Struct
{
    char a;
    int b;
    double c;
}s1;

再放a将放在地址0,放b时他认为前面的都是按照他的大小来存放的,a只占了一个字节,所以要补齐到4个字节,所以b放在3~7,放c时因为前面刚好8个字节,所以c放在8~15,所以这个结构体的大小为16;

typedef struct Struct
{
    double a;
    char c;
    int b;
    char d;
}s2;

根据规则1求出其大小为8+4+4+1 = 17,但是不是最大宽度8的倍数所以要补齐,sizeof(s2)的大小为24;

typedef struct Struct
{
    double a;
    char c;
    int b;
    char d;
    int e;
}s3;

在s2的基础上再加个int型,其sizeof(s3)大小依然是8+4+4+4+4=24。

如果其基本变量中存在指针变量时,不论什么类型指针,指正本身只占4个字节。

struct s1
{
    char a;
    int b;
    double c;
};
struct s2
{
    char a;
    s1 b;
};

经测试,可知sizeof(s1)为16,sizeof(s2)为24。即计算s2的存储长度时,在存放第二个元素b时的初始位置是在double型的长度8的整数倍处,而非16的整数倍处,即系统为b所分配的存储空间是第8~23个字节。
如果将s2的两个元素char型的a和s1型的b调换定义顺序,则系统为b分配的存储位置是第0~15个字节,为a分配的是第16个字节,加起来一共17个字节,不是最长基本类型double所占宽度8的整数倍,因此要补齐到8的整数倍,即24。测试后可得sizeof(s2)的值为24。

内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值