C++标准 alignas 与 windows 封装指令 (pack pragma) 的区别

news2024/9/24 13:15:50

C++标准 alignas 与 windows 封装指令 (pack pragma) 的区别

结构体内存对齐受到二方面的影响【共同作用】:

一个方面是语言的对齐规则=》语言的对齐规则
参考 https://blog.csdn.net/weixin_43698578/article/details/104801421 【主要影响因素是成员的对齐大小】【基本类型的对齐大小就是其sizeof大小;复合类型的对齐大小是其每个成员对齐大小的最大值(若成员还是复合类型,则递归应用此规则)】
而C++标准关键字alignas 的语义就是直接指定 复合类型的对齐大小的【仅此而已=>即不会影响复合类型它自己的成员的对齐大小,也不管实际的封包对齐过程(这由封装控制)】=>所以alignas这样干巴巴的直接指定是有限制的那就是不能指定比此复合类型按原生(正常方式)判定的对齐大小更小的值!

另一个方面是封包的影响:
平台编译器在内部会维护一个封包(封装)堆栈;此封包(装)堆栈栈顶的记录项对应的值;就是当前使用的封装对齐值【这是一个新概念】;这个封装对齐值会影响到结构体对齐的过程:具体行为是=>将每个成员的对齐大小与此封装对齐值比较,并选用较小的【注,这里是取用较小的了】;作为对齐过程中影响内存布局的实际对齐值(就暂时称为对齐分布值吧);每个成员在结构体中内存偏移位置必须是其对齐分布值的整数倍;整个结构体对象在内存中的位置,也必须是这个结构体对象的对齐分布值的整数倍!

(每个实体(无论是成员还是对象)的对齐分布值=>
是由 封装对齐值 和 此实体的对齐大小 共同决定【即这二个值比较并选用最小的】

封装对齐值:(编译期由编译器根据编译程序内部维护的封装堆栈栈顶记录项的值为每个类型指定)
【是编译源代码时,在编译过程(对于编译程序是运行期动态的)中编译器内部维护的封装堆栈的栈顶记录项对应的值确定;在编译源码过程中,编译器编译到类型(无论是处理基础类型,还是复合类型)时会将编译期内部维护的封装堆栈的栈顶记录项对应的值指定为此类型的封装对齐值】
而pack pragma 编译指令就是在编译期编译器运行时处理每个类型时,对编译器程序动态维护的封装堆栈进行操作=>修改栈顶记录项,让此时类型的封装对齐值被指定为不同的栈顶记录项的值;当然也可以不用pack 指令,那么编译器编译每个模块时,封装堆栈的栈顶记录项有一个默认的值;编译每个类型时取栈顶记录值标记每个类型的封装对齐值的过程是不变的

实体的对齐大小:(根据语言标准确定的,虽然也是编译器编译期确定的)
【粒度是针对每个实体有自己的对齐大小】
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

OpenCV小练习:人脸检测

OpenCV自带人脸检测模型,拿来就能用。所以“人脸检测”这个任务对于OpenCV而言真是太简单了——感叹一下:OpenCV太强大了!相关的介绍文章在网上可以搜到很多,原本我觉得没必要再写一篇了。结果我在写练习代码的时候,还…

【王树森】RNN模型与NLP应用(3/9):Simple RNN模型(个人向笔记)

前言 现在RNN已经没有以前那么流行了。在数据量大的情况下不如Transformer,但是在小数据的情况下仍然表现良好。 How to model sequential data? 1. one to one模型 像MLP和CNN,还有前面两节课讲到的二分类问题,都是基于one to one模型&a…

安装jmeter的梯度压测线程组(Custom Thread Groups)的插件

1、打开:Install :: JMeter-Plugins.org 2、进入主页后点击下面图片的链接进行安装 3、将安装包放入apache-jmeter-5.4.1 > lib > ext 里面 4、打开Jmeter 点击下面的【Plugins Manager】 5、进入 【Plugins Manager】后选择【Avaliable Plug…

Apache Flink 零基础入门(二):开发环境搭建和应用的配置、部署及运行

关联比赛: Apache Flink极客挑战赛——Flink TPC-DS性能优化 作者:沙晟阳 本文是根据 Apache Flink 系列直播课程整理而成,由阿里巴巴高级开发工程师沙晟阳分享,主要面向于初次接触 Flink、或者对 Flink 有了解但是没有实际操作过的同学。…

【分布式定时任务】XXL-JOB_2.4.1部署与实战

部署 分布式任务调度平台XXL-JOBXXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。https://www.xuxueli.com/xxl-job/ 一 数据库配置 执行初始化数据库…

flutter和原生Android以及IOS开发相比有什么优缺点?

Flutter 是 Google 开发的一个开源移动应用开发框架,它使用 Dart 语言编写。Flutter 的主要目标是使开发者能够从单一的代码库构建高性能、高保真的应用程序,这些应用程序可以在 iOS 和 Android 平台上运行,同时保持原生应用的感觉。 Flutte…

tomcat架构设计分析,核心组件详解

提示:tomcat整体架构分析,tomcat核心组件详解、tomcat请求全流程、tomcat设计模式分析。责任链模式设计、tomcat设计详解、tomcat调优的前置文档 文章目录 前言一、相关概念1、tomcat的概念2、web应用部署的3种方式 二、tomcat的整体架构1、tomcat架构图…

三星与海力士发力决战HBM4

在8月中旬,三星宣布正在加速推进下一代HBM(High Bandwidth Memory)的研发,目标是在今年年底前完成HBM4的设计定稿(tape-out)。而SK海力士则继续保持其竞争力,计划在10月份完成HBM4的设计定稿&am…

华为云征文|部署私有云和文档管理系统 Kodcloud

华为云征文|部署私有云和文档管理系统 Kodcloud 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 对比普通ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Kodcloud3.1 Jellyfin 介绍3.2 Docker 环境搭建3.3 Jell…

Linux内核6.12新特性:panic之后扫码显示故障信息

Linux 内核 6.12 版本即将引入一项有趣的功能——在内核Panic时显示一个可选的二维码。这一功能将允许用户通过扫描二维码直接访问内核Panic信息的日志,从而更容易地诊断问题所在。 这不是 Linux 第一次尝试使用二维码。早在2014年,就有过关于在内核Pani…

docker-compose容器及Dockerfile的使用

软件资源: 链接: https://pan.baidu.com/s/1iYMP7p7v_HUMc9vakIQfbQ?pwd6fes 提取码: 6fes docker-compose容器 部署nmt---nginxcomposetomcat项目 使用基础的docker指令来创建镜像,实现项目的发布。 Dockerfile--->docker-compose 背景&#x…

[知识技巧] iPhone 15 卡在恢复模式修复方法

如果您发现您的iPhone 15 卡在恢复模式下,这可能是一次相当紧张的经历,尤其是当它阻止您使用手机时。请放心,这是许多 iPhone 用户面临的共同挑战。幸运的是,有一些行之有效的方法可以解决此问题并将您的 iPhone 恢复到正常功能。…

启动盘如何复原

条件: 本教程适合Windows系统 通过Diskpart CMD启动U盘还原U盘在Windows中还有CMD命令可以使用 先“WindowsR”呼出运行窗口,在命令行中搜索"Diskpart"。点击回车输入“list disk”并且回车输入“select disk X”(X为替换可启动u盘的磁盘号)…

Vite项目启动服务器时报错 Error: Cannot find module @rollup/rollup-win32-x64-msvc.

前言: 网上找了很多方法,尝试后都不行。在某篇文章评论区种找到了一种方法解决了,谨以此篇文章记录解决问题的方案,方便日后使用。 解决方法:github链接 Cannot find module rollup/rollup-win32-x64-msvc (rollup 4.…

idea配置连接数据库的操作方法(适配不同版本)

文章目录 一、IDEA找不到database图标的解决方法二、链接数据库 一、IDEA找不到database图标的解决方法 首先很多小伙伴说我左右侧边栏都找了找不到数据库图标 解决办法: 第一种:选择 View --> Tool Windows --> Database 如果你的idea版本在这里…

昂瑞微IPO:华为、小米看重的国产射频芯片,“腾飞”了吗?

从一些科技大厂的投资动向中,往往能够发现一些新的技术力量正在酝酿。 据悉,近日,小米、华为投资的射频芯片供应商——北京昂瑞微电子技术股份有限公司(以下简称“昂瑞微”)在北京证监局办理辅导备案登记,…

docker简单私有仓库的搭建

示例: 【搭建简单的Registry仓库】 1. 下载 Registry 镜像 [rootdocker ~]# docker pull registry #可以查看开放的端口,需要把端口暴露出来 [rootdocker ~]# docker history registry:latest [rootdocker ~]# docker run -d -p 5000:5000 --restartal…

若依微服务ruoyi-auth在knife4j中不显示问题解决

关于若依微服务ruoyi-auth在knife4j中不显示问题解决 解决办法 一、添加swagger依赖文件 在ruoyi-auth模块下的pom.xml文件中添加ruoyi-common-swagger依赖 <!-- RuoYi Common Swagger --><dependency><groupId>com.ruoy

DS1202ZE - 零碎使用记录

文章目录 DS1202ZE - 零碎使用记录概述笔记测量通道频率是使用频率测量还是内建的频率计测量&#xff1f;如何让Ultra Sigma检测到DS1202ZE?如何消除过多的测量结果?通过UltraScope对示波器屏幕进行截图END DS1202ZE - 零碎使用记录 概述 手头在使用DS1202ZE, 将零碎的操作…

javascript网页设计案例详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 我们将以深入讲解一个基于JavaScript的网页设计案例。这个案例不仅涵盖了基础的DOM操作、事件处理和动画效果&#xff0c;还将涉及更高级的主题&#xff0c;如异步数据加载、表单验证、模块化设计和响应式布…