问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

#pragma pack(1) 的意义是什么

发布网友 发布时间:2022-05-10 20:58

我来回答

4个回答

热心网友 时间:2023-10-31 06:22

设置结构体的边界对齐为1个字节,也就是所有数据在内存中是连续存储的。

比如你在C语言中定义下面这样的结构体:

struct s {
char ch;
int i;
};

然后在主函数中写一句:printf("%d", sizeof(struct s))

也就是输出结构体s所占的字节数

你觉得输出结果会是多少呢?

我们知道,char型占用1个字节,int型占4个字节,那么输出的结果是5吗?

答案是否定的。你可以自己试一下,输出结果为8。

为什么会这样呢?这是因为编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行了优化。实际上第一个char型成员虽然本来只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员的地址能够被4整除。因此实际占用的是8个字节。

而#pragma pack(1)让编译器将结构体数据强制连续排列,这样的话,sizeof(struct s)输出的结果就是5了。

热心网友 时间:2023-10-31 06:23

意思就是 以下代码编译出来的是以1个字节的方式对齐的。这样能节约内存资源,但是会在效率上有所影响

热心网友 时间:2023-10-31 06:23

设置内存对齐为:1字节对齐。使用方法如下:

#pragma pack(n)
struct s {
int i;
char ch;
};
#pragma pack()

热心网友 时间:2023-10-31 06:24

问的是意义不是意思,意思的话正如其它答友所说,意义就是节省内存资源,但是效率会降低。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 如何用memccpy()函数给一个结构体赋值呢 物联卡可以在手机上用吗? 什么手机可以使用物联卡 瑾幂拉线丸效果好吗? 瑾幂拉线丸怎么样呀? 清宫排毒丹拉线丸怎么使用 最近我周围的人都在用一种叫妇科拉线丸,放置在*内两三天然后线留在外面过几天拉出来就会有很多垃圾 大家都 知道拉线丸是什么是用来干什么的?它的效果好不好? 华为nova是女人用的吗 华为nova是女生用的吗 华为nova是不是女生用的 巴彦县归绥化管吗? 历史人物的壮举,比如像赵一曼那样的历史人物还有哪些? 为什么巴彦县归绥化市管了 突然梦见考试卷子啥都不会没做完还下雨了 巴彦县的名人 巴彦23位抗日英雄都是谁? 梦见下大雨自己做好事背学生去考试 烈士张甲州简介 请给我关于革命烈士的故事吧!!! C语言中#program是什么意思? 手机Program Files 文件夹是干什么的 如何删除C盘中Program Files中的文件夹 C语言中#program是什么意思 孢子 下载和安装 program files可以移动到d盘吗 电脑c盘里的这个文件能删不? Sims3后缀为package放哪 模拟人生3日落溪谷的package文件应该放在哪里? 模拟人生3下的package文件在游戏里不显示!!求助啊!! 模拟人生3下的package文件在游戏里不显示!!求助啊!! 哪些消防安全隐患?该如何整改? 公安消防局向某企业发出炎灾隐患整改通知书属于行政抽象行为? 消防大队出具的《重大火灾隐患整改单位通知书》没有公章是否生效? 我是物业管理公司,请问如果业主在新房装修期间,将房内消防设施改动了,公司要求业主将其恢复,但无法... 消防安全隐患的消防安全隐患的特征 消防大队开的消防责令改正通知书是否会被处罚? 消防存在安全隐患不整改直接罚款和不合乎规定 菜刀生锈不要着急换新,教你一个巧方法,多锈的菜刀变得光亮如新 2012年7月31(农历六月十三)未时出生的女孩本家姓张起名