三分钟带你学会修改VS的默认对齐数


前言

上期博客博主已经细致地讲解了c语言中结构体大小的计算(不清楚的道友可以点击头像,看上一期细致内容),其中最重要的就是结构体内存对齐,而结构体内存对齐中最重要的就是对齐数,即变量大小和编译器默认对齐数的较小值,而VS2019的默认对齐数为8,这就导致很多结构体较大,即浪费空间较多,因此本期博主带领大家修改VS的默认对齐数,使内存分布更加合理。


提示:以下是本篇文章正文内容,下面案例可供参考

一、相关指令

修改默认对齐数为num 

#pragma pack(num)  

 取消对默认对齐数的修改,还原为默认值

#pragma pack()

二、修改样例

#include<stdio.h>
#pragma pack(8)  //设置默认对齐数为8
struct S1
{
	char c1;
	int i;
	char c2;
};
#pragma pack() //取消设置的默认对齐数,还原为默认

#pragma pack(1) //设置默认对齐数为1
struct S2
{
	char c1;
	int i;
	char c2;
};
#pragma pack() //取消设置的默认对齐数,还原为默认

int main()
{
	printf("%d\n", sizeof(struct S1));
	printf("%d\n", sizeof(struct S2));
}

 输出结果如下:

三、样例分析

在该样例中我们可以清晰地看到利用#pragma pack( ) 指令可以修改默认对齐数,因为S1 和S2 成员变量完全相同,且定义的顺序也相同,最后大小不同。(对于计算结构体大小,上篇博客已经细致的讲过了,不会的道友们可以去看看)。

总结

通过这两篇博客,我们可以直观的认识到结构体在定义的时候是有很多方法可以降低其内存大小,比如让占用空间小的成员尽量集中在一起,以及修改默认对齐数的方法。因此希望各位道友在定义结构体时多去思考思考,尽可能减小结构体的大小,写出高质量程序。

制作不易,还请各位道友可以点赞收藏评论,谢谢!!!

猜你喜欢

转载自blog.csdn.net/m0_70322372/article/details/127311910
今日推荐