C++学习笔记基础篇21——结构体和类的字节对齐规则

为什么要进行字节对齐?

《Windows核心编程》里这样说:当CPU访问正确对齐的数据时,它的运行效率最高,当数据大小的数据模数的内存地址是0时,数据是对齐的。例如:WORD值应该是总是从被2除尽的地址开始,而DWORD值应该总是从被4除尽的地址开始,数据对齐不是内存结构的一部分,而是CPU结构的一部分。当CPU试图读取的数值没有正确的对齐时,CPU可以执行两种操作之一:产生一个异常条件;执行多次对齐的内存访问,以便读取完整的未对齐数据,若多次执行内存访问,应用程序的运行速度就会慢。

字节对齐实验理解

定义:在系统默认的对齐方式下:每个成员相对于这个结构体变量地址的偏移量正好是该成员类型所占字节的整数倍,且最终占用字节数为成员类型中最大占用字节数的整数倍。

#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
	int num;
	int sss;
	int yyy;
	char name[50];



public:
	void print_name()
	{
		cout << "name = " << name << endl;
	};
};
int main() {
	
	Student stud = { 0 };
	int stud_size = sizeof(stud);
	cout << "stud_size = " << stud_size << endl;
	system("pause");
	return 0;
}

首先定义一个结构体,计算他的内存,按照一般正常的思维来说这里

int num;//占用4个字节
int sss;
int yyy;
char name[50];//占用1*50个字节

总的字节数应该是62个字节,然而程序的结果却是64个字节,原因就是字节对齐规则,总的字节数要为成员类型所占最大字节数的整数倍。62不是整数倍,向上最小的就是64。
在这里插入图片描述
把上述结构体修改一下进行验证,如果只有int就是4字节,只有char就是1字节,char[50]就是50字节。
如果一个char[50],一个int就是56字节,多出来的两个字节就是为了满足字节对齐规则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值