【概念辨析】结构体内存对齐

news2024/11/26 16:38:39

一、什么是结构体内存对齐

        是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。

        通过这种方法可以使得机器访问效率加快,也可以使得平台一致性变高。

二、结构体对齐的规则

有两组代码:

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

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

int main()
{
	cout << sizeof(A) << endl;
	cout << sizeof(B) << endl;
	return 0;
}

 

由此我们可以猜测是结构体的内存对齐发挥了作用。 

结构体内存对齐的规则:

1.对于每个成员变量找出它们的对齐数

        从成员中找出一个占字节数最大的,再与默认对齐数进行比较,这两个数中去一个较小值。

2.再找到一个最大对齐数

        这个最大对齐数(默认对齐数 与 所有成员变量类型最大的,两数中去一个较小值)是用来确定最后的结构体的大小,完成第一步,将所有成员变量存储在该区的地方以后,需要再根据这个数来确定结构体的总大小。(给这个数乘整数,让所有成员能够放得下)

示例:

 

 

 三、补充

        1.改变结构体默认内存数的方法:

#pragma pack()  //恢复默认对齐数
#pragma pack(x)  //x是想修改的默认对齐数

         2.第一个成员变量始终是对齐在与结构体偏移量为0处的地址(也就是相对于结构体来说是0地址处)

         3.节省空间的技巧是:使得占空间小的变量集中在一起

         4.内存对齐的意义:用空间换时间(机器访问效率提升)

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

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

相关文章

【微信小程序】-- 页面配置(十八)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

论文阅读:带有物体级重定位的视觉惯性多实例动态SLAM

带有物体级重定位的视觉惯性多实例动态SLAM Ren Y, Xu B, Choi C L, et al. Visual-Inertial Multi-Instance Dynamic SLAM with Object-level Relocalisation[C]//2022 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2022: 11055-1106…

详述java的设计模式(四)

1.模板方法模式 模板方法模式是一种行为设计模式&#xff0c;它定义了一个操作中算法的骨架&#xff0c;将算法中不同的实现延迟到子类中。这个模式可以在不改变算法结构的前提下&#xff0c;使子类可以重新定义算法中的某些步骤&#xff0c;从而满足不同的需求。 模板方法模…

【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…

vue3中前端处理不同数据结构的JSON

有时候&#xff0c;后端返回的JSON数据格式&#xff0c;是前端不需要的格式类型&#xff0c;这时&#xff0c;要么让后端修改&#xff0c;你要什么格式&#xff0c;那么让后端大哥哥给你返回什么格式。但是有时候不尽人意&#xff0c;后端大哥哥让你自己转换&#xff0c;此时就…

【javaScript面试题】2023前端最新版javaScript模块,高频24问

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于javaScript的面试题 目录 一、2023javaScript面试题精选 1.js的数据类型…

Temporal Fusion Transformer (TFT) 各模块功能和代码解析(pytorch)

Temporal Fusion Transformer (TFT) 各模块功能和代码解析(pytorch) 文章目录Temporal Fusion Transformer (TFT) 各模块功能和代码解析(pytorch)GLU(Gated Linear Unit)模块GRN(Gated Residual Network)门控残差网络Transformer经典模块Add&Normalize模块Scaled Dot-Produ…

【Leetcode】【简单】704. 二分查找

给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…

HNU工训中心:数模转换实验报告

D 级任务&#xff1a;实验 74194 的仿真验证 1. 实验任务 任务:实验 74194 的仿真验证&#xff0c;掌握 Quartus 仿真的基本原则和常规步骤&#xff0c;记录移 位寄存器的数据读写&#xff0c;并描述仿真波形&#xff0c;结果分析并记录到实验报告。 实验实作 最终的电路图…

“探索未来:VR全景直播技术引领新媒体时代”

随着虚拟现实技术的不断发展&#xff0c;VR全景直播已经成为了越来越受欢迎的直播形式。VR全景直播可以让观众通过虚拟现实设备亲临直播现场&#xff0c;享受身临其境的观看体验。VR全景直播是什么&#xff1f; VR全景直播是虚拟现实技术和直播的结合。相对于传统直播&#xff…

SOLIDWORKS提升 SAE赛车队成绩

SOLIDWORKS Education Edition实施结果&#xff1a; ●将车队成绩提升至史上最高水平 ●使用仿真工具验证赛车设计 ●促进车队成员之间的交流 ●增强设计可视化试用及报价新罕布什尔大学是美国顶级研究机构之一。UNH 拥有多个学术部门、跨学科机构和研究中心&#xff0c;屹立在…

APP发布----HBuilder

pc端&#xff1a;桌面应用&#xff1a;electronjs–vasode web应用&#xff1a; 纯前端开发—vue、react等框架 混合开发 — php、jsp、asp App开发类型 原生开发&#xff1a; Jave – AndroidObject – iosc – 鸿蒙运行效率最高、开发复杂、页面一致性 web-app&#xff08;…

新C++(12):位图与海量数据处理

"无关利弊或对错&#xff0c;勇气一直在"现在给你一道面试题:给40亿个不重复的无符号整数&#xff0c;没有任何排序。给出一个无符号整数&#xff0c;如何快速地判断&#xff0c;该数是否存在于40亿多个这样的无符号整数之中&#xff1f;唔……我想将这40亿个多数进行…

25- 卷积神经网络(CNN)原理 (TensorFlow系列) (深度学习)

知识要点 卷积神经网络的几个主要结构: 卷积层&#xff08;Convolutions&#xff09;: Valid :不填充&#xff0c;也就是最终大小为卷积后的大小. Same&#xff1a;输出大小与原图大小一致&#xff0c;那么N ​变成了​N2P. padding-零填充. 池化层&#xff08;Subsampli…

STM32HAL库1:认识时钟树(STM32F407)

目录 1.认识时钟树 1.1什么时钟 1.2认识时钟树 2.配置系统时钟 2.1系统适中的配置过程 2.2外设时钟使能和失能 2.3sys_stm32_clock_init函数&#xff08;F407&#xff09; 2.4SystemClock_Config函数&#xff08;F407&#xff09; [F1] [F4] 1.认识时钟树 1.1什么时钟 …

【禅道测试环境搭建及安装】Linux上的禅道安装教程,从环境搭建开始

目录 一、操作环境 二、安装VMware 三、安装FinalShell 四、在VMware里安装CentOS 1.前置&#xff1a;CentOS的下载 2.CentOS的安装 3.查看网络 五、用宿主机连接远程的虚拟机 六、禅道包的下载与CentOS配置的修改 七、上传项目包并安装禅道 一、操作环境 Windows 10…

Substrate 基础教程(Tutorials) -- 授权特定节点

五、授权特定节点 在添加可信节点中&#xff0c;您看到了如何使用一组已知的验证器节点构建一个简单的网络。该教程演示了一个简化版的许可网络&#xff08;permissioned network&#xff09;。在一个被许可的网络中&#xff0c;只有被授权的节点&#xff08;authorized nodes…

STM32CubexMX与FreeRTOS学习

FreeRTOS结合MX软件开发&#xff0c;基础配置直接生成&#xff0c;我们只需要会操作即可&#xff0c;操作一些API函数&#xff0c;注意事项就是&#xff1a;头文件、二值信号量一开始就有、定时器需要打开并且配置周期 1-LED-EXTI 上下拉模式和触发模式不要选择错误 void HAL_…

Elasticsearch:如何在 Elastic 中实现图片相似度搜索

作者&#xff1a;Radovan Ondas 在本文章&#xff0c;我们将了解如何通过几个步骤在 Elastic 中实施相似图像搜索。 开始设置应用程序环境&#xff0c;然后导入 NLP 模型&#xff0c;最后完成为你的图像集生成嵌入。 Elastic 图像相似性搜索概览 >> 如何设置环境 第一步…

【11】linux命令每日分享——useradd添加用户

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…