剖析结构体和大小端

本文介绍了结构体的概念和作用,特别是在32位平台上的内存对齐问题。内存对齐旨在提高效率,遵循特定的规则。同时,文章还探讨了大小端的背景,定义以及如何判断系统是大端还是小端,并提供了两种简单的判断方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体

1.概念

1.结构体:描述一个事物,问题的一系列数据的集合.
例:

struct person
{
char name[20];
int year;
int class;
int phone;
char addr;
};


2.作用

1.内置类型无法描述需要表述的事物,问题时就会定义结构体
2.返回的参数不只是一个而是一个集合时就会采用结构体

3.内存对齐问题


(以下问题都是在32位平台讨论)
  • 产生内存对齐的问题的原因
    1.不是所有的硬件平台都只支持访问任意地址上的任意数据
    2.内存对齐可以提高工作效率,对于没有对齐的数据,内存访问的时候可能会处理两次而对齐的数据可以只访问一次
    内存对齐就是典型的以空间换时间的做法
  • 内存对齐规则
    1.第一个成员与结构体变量的偏移量为0的地址处
    2.剩余的变量要对齐到某个(对齐数)的整数倍的位置上
    对齐数为编译器默认的一个对齐数与该成员大小的较小值。
    VS中默认的值为8
    linux中默认的值为4

3.结构体总大小为最大对齐数(第一个成员变量没有对齐数)的整数倍
4.如果结构体中有成员变量的类型是结构体被,镶嵌的结构体对齐到自己的最大对齐数的整数倍处,结构体总大小为最大对齐数的整数倍(遵循第3条原则:这里的最大对齐数包括被嵌套结构体的对齐数)

例:
struct student
{
char a;
double c;
int b;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值