栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

浅析C语言结构体内存对齐问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅析C语言结构体内存对齐问题

我们之前了解过浮点数,整数在计算机的存储方式,结构体他也有他的一套存储方式。

#include
using namespace std;
struct test {
	char a;
	int b;
	char c;
};
int main() {

	cout << sizeof(test) << endl;
}

sizeof出来是多少呢?这还不简单 1 + 4 + 1 = 6!那结果会是这样吗?

答案真的是让我们大跌眼镜,那这样我把 b , c换一下位置会怎么样呢 

 

 

 

 答案又变成8了,为啥会出现这样的现象呢?

结构体的大小不能,进行简单的元素的大小相加,结构体的内存布局,要考虑内存对齐。

如何内存对齐呢?

  1. 第一个成员在结构体变量偏移量为0的地址处。
  2. 其他成员变量除了第一个之外,要对齐(起始偏移量要能整除该成员的对齐数)到某个数字(对齐数  ----   不考虑编译器设置对齐数的情况下指的是自身大小)的整数倍的地址处。
  3. 结构体的大小必须是最大对齐数的整数倍。

 

那我们在看一个例子:

#include
using namespace std;
struct test {
	double a;
	char b;
	int c;
	char e;
};
int main() {

	cout << sizeof(test) << endl;
}

 

 

证明我们的分析正确  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846693.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号