c语言中的字节对齐

本文介绍了C语言中的字节对齐概念,解释了为何进行字节对齐以提高CPU访存效率,并通过实例展示了字节对齐在结构体存储中的规则和计算方法,包括结构体成员的偏移量和大小。最后提到了如何通过#pragma pack指令自定义对齐数。
摘要由CSDN通过智能技术生成

一、什么是字节对齐?

计算机中的数据在存储时并不是按顺序存储,因为在访问特定的数据类型时通常从特定的内存地址开始,所以数据在存储时特定的类型存储时从特定的地址开始,比如我们所说的int类型的对齐数是4,意思是存储这个int类型的变量的地址%4==0,这就是对齐数为4的意思。

二、为什么要字节对齐?

字节对齐是的思想就是以空间换取时间。所以在存储数据时采取字节对齐的方式,可以让cpu在访存读取数据时的效率大大提高。如果数据在存储时是按照顺序的方式来存储的,比如说有些机器在访存时每次都是从偶地址开始的,如果我们要访问一个int型的数据,我们采用字节对齐的方式话,在32位的系统下我们通过一次访存就可以读出这个数据,如果没有字节对齐,那么当这个整形数的起始地址是个奇地址时,我们要访存两次才可以完整的读出这个数据,并且在读出后还要通过拼接才能拿到这个整形数,相对而言我们采用字节对齐的方式的效率高。

三、如何正确的理解数据存储的地址?

在VC6.0下我们写出这样一个程序

#include<stdio.h>

int main()
{
	
	char b=0;
	int a=0;
	printf("%p\n",&b);
	printf("%p\n",&a);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值