C++ #pragma pack(n)

news2024/11/26 13:28:52

一、#pragma简介

        #pragma是预处理指令的一种,它的作用是设定编译器的状态指定编译器完成特定任务

                (预处理阶段:在编译阶段之前进行)

        #pragma相当于是由各个厂商开发扩展的,因此可能编译器操作系统不同而有所差异

        (以上的意思是:不是所有编译器都一定能用所有的#pragma

二、#pragma pack(n)

        #pragma pack(n)的作用是重新设定内存对齐的长度大小为n(单位为:字节),有关内存对齐模式,请参考我之前写的《C++内存对齐原则》。

        举一个简单的例子,便于大家理解:

#include <iostream>
#include <string>

using namespace std;

struct A {
	char a;
	int b;
	short c;
};


int main() {
	cout << "Without \"#pragma pack(n)\", sizeof(A) : " << sizeof(A) << endl;// 12

	return 0;
}

        以上结构体,按照内存对齐原则,长度应该为12。以下为输出结果:

        如果我们在结构体A定义的前边加上:#pragma pack(2)

                表示接下来内存按照对齐长度为2的方式定义:

#include <iostream>
#include <string>

using namespace std;

#pragma pack(2)
struct A {
	char a;
	int b;
	short c;
};

int main() {
	cout << "With \"#pragma pack(n)\", sizeof(A) : " << sizeof(A) << endl;// 8

	return 0;
}

        结果长度为8,程序输出如下所示:

三、#pragma pack()

        当使用#pragma pack(n)后,接下来所有的代码都会按照内存对齐长度为n的方式进行。

此时如果我们想还原,也就是希望接下来的代码,按照默认内存对齐原则的方式进行,此时应该使用#pragma pack()。示例如下:

#include <iostream>
#include <string>

using namespace std;

#pragma pack(2)
struct A {
	char a;
	int b;
	short c;
};
#pragma pack()

struct B {
	char a;
	int b;
	short c;
};

int main() {
	cout << "sizeof(A) : " << sizeof(A) << endl; //8
	cout << "sizeof(B) : " << sizeof(B) << endl; //12

	return 0;
}

        在A的定义结尾使用#pragma pack()之后,B的长度按照4字节对齐的长度为12,而不是按照上边A的2字节对齐(结果为8),程序输出结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】-- TSR-TVD:时变数据分析和可视化的时间超分辨率

TSR-TVD: Temporal Super-Resolution for Time-Varying Data Analysis and Visualization 摘要1 引言2 相关工作3 我们的循环生成方法3.1 损失函数3.2 网络架构 4 结果与讨论4.1 数据集和网络训练4.2 结果4.3 讨论 5 结论和未来工作致谢参考文献附录1 训练算法及优化2 网络分析…

基于 Arm 虚拟硬件的心电图(ECG)疾病分类应用开发实战

基于 Arm 虚拟硬件的心电图(ECG)疾病分类应用开发实战 目录 文章目录 [toc] 一、实验背景1. 嵌入式软件开发的基本流程2. Arm 虚拟硬件镜像产品简介 二、实验目标三、实验步骤简介四、实验前准备1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例1.1 百度智能云账号准…

win11家庭版使用自带的Linux子系统并安装docker【全网整合版】

1. 电脑配置项 开发者选项 设置->系统->开发者选项 启用或关闭windows功能 控制面板->卸载程序->启用或关闭windows功能 勾选适用于Linux的Windows子系统和虚拟机平台并重启电脑(首次勾选选项时电脑提示重启) Hyper-V 关键点&#xff1a;win11家庭版在启动…

如何开发一个海外仓系统?难度在哪,怎么选择高性价解决方案

作为海外仓管理的重要工具&#xff0c;海外仓系统的实际应用价值还是非常高的。为了让大家能更好的理解wms海外仓系统&#xff0c;今天会介绍海外仓系统开发的逻辑架构&#xff0c;以及作为海外仓企业要怎么确定高性价比的数字化管理解决方案。 1、开发海外仓系统要考虑的功能…

IDEA 学习之 打开一个 MAVEN 工程

目录 1. 单体工程2. 多 module 工程3. 多个多 module 工程3.1. 重复 1 步骤3.2. 添加其他多 module 工程 1. 单体工程 2. 多 module 工程 3. 多个多 module 工程 3.1. 重复 1 步骤 3.2. 添加其他多 module 工程

红酒——这片大地孕育的液体宝石,背后藏着怎样的风土与传奇?

红酒&#xff0c;不仅是液体中的宝石&#xff0c;更是承载着无数风土与传奇的诗意之物。每一滴红酒都蕴含着大自然的馈赠&#xff0c;每一瓶都讲述着属于它自己的故事。今天&#xff0c;就让我们一起探寻红酒背后的风土与传奇&#xff0c;感受雷盛红酒文化所承载的文化底蕴。 一…

光储系统怎么选?天合储能工商业储能系统Potentia蓝海2震撼来袭

重塑光储设计&#xff0c;颠覆智造想象&#xff0c;2024年6月12日&#xff0c;天合光能“工商储进化论”新品发布会于上海浦东隆重召开&#xff0c;行业首款AI仿生液冷工商业储能系统Potentia蓝海2重磅登场。秉持产品优化、技术创新、服务精进、场景拓展的四维升级理念&#xf…

WeiXin Live Broadcast 2024.06.21

WeiXin Live Broadcast 2024.06.21 微信直播流程 微信直播&#xff0c;如果需要展示主播以及现场画面&#xff0c;需要摄像头和电脑端的直播推流软件。 基础设备&#xff1a;1&#xff09;手机 2&#xff09;笔记本带摄像头 3&#xff09;手机数据线连接笔记本 4&#xff09…

Ollama深度探索:AI大模型本地部署的全面教程

目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…

【SHA】-- 花样加密算法

可转链接&#xff1a; 勤奋的小牛–加密算法SHA SHA 算法 安全散列算法&#xff08;英语&#xff1a;Secure Hash Algorithm&#xff0c;缩写为SHA&#xff09;是一个密码散列函数家族&#xff0c;是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的&#xff0c;长…

【自撰写】【国际象棋入门】第7课 常见战术分析(二)牵制、驱赶和腾挪

第7课 常见战术分析&#xff08;二&#xff09;牵制、驱赶和腾挪 在《第6课&#xff1a;常见战术分析&#xff08;一&#xff09;吃双和抽将》中&#xff0c;我们通过一系列实际棋局的例子&#xff0c;简单介绍了“吃双”和“抽将”这两种十分常见的战术。本次课中&#xff0c…

Aigtek电压放大器的主要作用是什么

电压放大器是一种重要的电子设备&#xff0c;用于放大电压信号。它在许多电子系统和应用中发挥着关键的作用。本文将详细介绍电压放大器的主要作用和工作原理。 电压放大器是一种电子电路&#xff0c;它可以将输入信号的电压放大为更大的输出电压。放大器通过增加输入信号的幅度…

了解CDN:提升网络性能和安全性的利器

在当今的数字时代&#xff0c;网站性能和安全性是每一个网站管理员必须关注的核心问题。内容分发网络&#xff08;CDN&#xff0c;Content Delivery Network&#xff09;作为解决这一问题的重要工具&#xff0c;逐渐成为主流。本文将详细介绍CDN的定义、作用及其工作原理&#…

AIGC时代,重塑人的核心竞争力?

随着人工智能技术的飞速发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;的时代已经悄然而至。在这个时代&#xff0c;AI不再仅仅是一个技术概念&#xff0c;而是深入到我们生活的方方面面&#xff0c;从创作到生产&#xff0c;从娱乐到工作&#xff0c;AI都在以…

展厅设计关键因素有哪些

1、选择一站式服务公司 企业不论参加展会还是做展厅设计装修&#xff0c;其目的都是为了更好的展示公司的产品&#xff0c;从而促进与客户的合作。那么展厅设计首先是要找展厅设计公司来做的&#xff0c;不过现在市面上有很多公司都可以设计制作展厅&#xff0c;这就需要客户去…

.net8 blazor auto模式很爽(三)用.net8的Blazor自动模式测试,到底在运行server还是WebAssembly

Blazor自动模式到底什么时侯在运行server&#xff0c;什么时侯在运行WebAssembly。这个对我们来说非常重要&#xff0c;官方并没有很清楚地告诉我们。并且存在一些误导&#xff0c;让我们觉得自动模式就是不管我怎么弄&#xff0c;blazor都会自动识别该使用server还是WebAssemb…

springboot基于Web的社区医院管理服务系统 LW+ PPT+源码+讲解

3系统需求分析 3.1系统功能 通过前面的功能分析可以将社区医院管理服务系统的功能分为管理员、用户和医生三个部分&#xff0c;系统的主要功能包括首页、个人中心、用户管理、医生管理、预约医生管理、就诊信息管理、诊疗方案管理、病历信息管理、健康档案管理、费用信息管理…

人工智能在肿瘤检测以及癌症早筛中的最新研究|顶刊速递·24-06-21

小罗碎碎念 推文主题&#xff1a;人工智能在癌症检测以及早筛中的最新研究进展 之前有一篇推文介绍了哈佛发表的3D病理&#xff0c;当时应该有不少老师/同学对于数据的获取是有些懵的&#xff0c;那么今天你在第一篇文章中或许能找到答案。 一直看我推送的&#xff0c;并且不跳…

热点观察 | 全球社交应用IAP收入持续上升,小游戏、短剧出海赛道火热!

2024年进度条即将过半&#xff0c;回顾上半年&#xff0c;“Sora横空出世”、“短剧出海”、“小游戏爆款不断"给了我们太多惊喜&#xff0c;虽说如今市场竞争激烈、行业日趋饱和&#xff0c;但新技术、新需求也在快速跟上。下面&#xff0c;我们就来盘一盘近期全球手游和…

防护用具穿戴智能监测摄像机

防护用具穿戴智能监测摄像机在现代安全管理中扮演着越来越重要的角色。这些先进设备不仅仅是简单的监视工具&#xff0c;更是通过整合高级技术来提升工作效率和安全性&#xff0c;特别是在复杂环境和危险作业场所的应用日益广泛。 智能监测摄像机具备了高度精确的视觉识别能力&…