结构体内存分配与编译器对齐数

news2024/12/24 9:42:18

一、编译器对齐数
先说一个编译器的概念:对齐数。
1、对于基本类型的数据成员:
结构体的成员的对齐数=min(编译器对齐数,成员占内存大小)
例如VS编译器对齐数位8,那么int型数据对齐数就为4,double型数据对齐数就为8,char型数据对齐数就为1。
2、对于结构体成员:
结构体的成员的对齐数=min(编译器对齐数,结构体最大对齐数)
其中结构体最大对齐数位结构体中所有成员变量的最大对齐数。
例如
struct stru
{
char a;
int b;
};//对齐数为4
struct stru
{
int a;
double b;
};//对齐数为8
注意结构体的对齐数并不是结构体大小与编译器对齐数的较小者。
3、从概念上看,成员或者结构体的对齐数都不会大于编译器的对齐数,也就是说如果你的成员变量占用空间比较小的时候,按这些成员中最大对齐数对齐;如果成员变量占用内存控件大于编译器对齐数,就得按照编译器对齐数对齐。
4、可以通过#pragma pack(4) 改变编译器的对齐数。
二、结构体内存分配
1、结构体的第一个成员存储在结构体变量开辟的空间的起始地址。
2、从第二个成员开始,存储的位置是已分配空间大小后面的第一个自身大小的整数倍。
3、如果是数组,可以想象把数组拆成N个普通变量。
比如int n[10];就是按照int找到数组第一个值的分配位置,然后往后数10个int占用空间。
4、如果嵌套了结构体(或者类),结构体也看做是特殊成员变量,有其自己的对齐数,仍按照上述原则分配内存。
5、结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
最后一个变量如果对齐数不是结构体最大对齐数,后面会补齐。
三、例
在这里插入图片描述
内存分配情况是:
{a b c d e }
{4 4 4 (4) 8 1 7} =32
从上述代可以看出,知道了结构体的结构,就知道了各成员的偏移地址,通过结构体的起始地址+偏移i地址,就可以得到个成员变量的起始地址,再结合类型,就能得到各成员变量的值。

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

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

相关文章

如何理解OSI七层模型?

一、是什么 OSI (Open System Interconnect)模型全称为开放式通信系统互连参考模型,是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框架 OSI 将计算机网络体系结构划分为七层,每一层实现各自…

20T算力打造轻地图方案,这家智驾公司持续内卷

作者 | 张祥威 编辑 | 德新 行泊一体的话题热度不减。 近日,宏景智驾核心产品单SoC行泊一体解决方案已全场景跑通,可实现高速导航辅助驾驶。 在推进量产的同时,宏景智驾也在布局BEV感知、轻高精地图甚至去高精地图的智驾方案,同…

IPv6基础

1. IPv6概述 基本概念 IPv6(Internet Protocol Version 6)也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4&#xff…

influxDB学习记录

一、官网 influxdb官方英文文档:https://docs.influxdata.com/influxdb/v1.8/query_language/spec/influxdb中文文档:https://jasper-zhang1.gitbooks.io/influxdb/content/ 二、centos安装与基本配置 influxdb安装与基本配置(centos) 三…

iPhone上的闹钟不工作的原因不单一,可能多达十种

这篇文章将带你了解如何让iPhone闹钟重新工作。 调大音量 这听起来可能很明显,但不要跳过这一步。使用手机侧面的按钮可以在不增加闹钟音量的情况下提高音量。这是因为iPhone可以让你用相同的按钮控制两组完全不同的声音。 例如,如果你打开了音乐流媒…

CMMI V2.2模型介绍

1、CMMI模型内容编排 模型内容主要由三篇组成,包括概述、实践域(PA)和附录,共分为6个章节。 章节 标题说明篇章:概述第1章关于CMMI V2.0概述CMMI V2.0产品套件,包括模型的执行摘要。第2章 成…

mysql—面试50题—1

注:面试50题将分为5个部分,每部分10题 一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student …

S-Clustr(影子集群)新增Nets3e插件,实现一对多主机拍照

公告 项目地址:https://github.com/MartinxMax/S-Clustr 项目地址:https://github.com/MartinxMax/Nets3e 环境 这里有一台Windows主机,我们拿到了Webshell 依赖安装 根据你的主机类型选择依赖安装程序。 配置Nets3e 安装完成后,我们需要启动Nets3e服务端(这边…

学习git博客

git新建分支并且提交代码过程 1. git pull <codeBaseAddress> [分支名(默认是master)] 2. cd <projectName> 3. git branch <newBranchName> // 创建分支 4. git checkout <newBranchName> // 切换到新分支 // 开始写你的新代码 5. git add . //…

在Windows下Edge浏览器OA发起流程问题

在Edge浏览器中发起流程 如上图所示&#xff0c;不能正常打开Excel&#xff0c;自动将Excel表格转为了PDF 怎么处理&#xff1f;还得使用IE浏览器来访问&#xff0c;但打开IE后又自动跳转到Edge&#xff0c;根本就不给使用&#xff0c;在Edge下使用IE模式也解决不了这个问题。…

Aocoda-RC F405V2 FC(STM32F405RGT6 v.s. AT32F435RGT7) IO Definitions

[TOC](Aocoda-RC F405V2 FC(STM32F405RGT6 v.s. AT32F435RGT7) IO Definitions) 1. 源由 Aocoda-RC F405V2飞控支持betaflight/inav/Ardupilot固件&#xff0c;是一款固件兼容性非常不错的开源硬件。 之前我们对比过STM32F405RGT6 v.s. AT32F435RGT7 Comparison for Flight …

架构案例分析重点

架构案例分析重点 信息系统架构架构图 层次式架构&#xff08;可能考点&#xff09;表现层框架设计中间层架构设计数据访问层数据访问层工厂模式的设计&#xff08;一个考点&#xff09; 物联网三层 云原生架构面向服务架构(SOA)SOA设计模式 嵌入式系统架构鸿蒙操作系统&#x…

为什么索引要用B+树来实现呢,而不是B树

首先&#xff0c;常规的数据库存储引擎&#xff0c;一般都是采用 B 树或者 B树来实现索引的存储。 B树 因为 B 树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对于数据库来说&#xff0c;所有…

常见分布整理

概率论 - 常见分布&#xff08;及其分布表&#xff09; 常见分布的期望和方差 离散型分布 两点分布 有2种结果&#xff0c;实验只做1次 X~b(1,p)则有 P(X k) pk (1-p)1-k,k 0, 1 数学期望&#xff1a;E(X) p 方差&#xff1a;D(X)p(1-p) 二项分布 P(A) p&#xff0…

网络编程知识点

概念 计算机网络定义 利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;以功能完善的网络软件及协议实现资源共享和信息传递的系统。 计算机网络分类 按覆盖范围分&#xff1a; 局域网 作用范围一般为几米到几十公里。 …

【LLM】大模型微调,压缩,量化,部署(还在缓慢更新

前段时间很忙一直没时间follow最近的大模型工作&#xff0c;最近几天闲一点了…这个可能会出现整理不全或者是结果没跑完的情况&#xff0c;我尽量快一点&#xff08;如果最近没啥事的话&#xff09;&#xff0c;有啥想法可以在评论区d一下我。 LLM排行榜 &#xff1a; https:/…

Labview2023安装教程 (最新最详细保姆级教程)

目录 一 .简介 二.安装步骤 软件&#xff1a;Labview版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;2.73G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.6GHz 内存8G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a; htt…

【趣味随笔】盘点国内外做双足机器人的公司

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

大数据精准营销告诉你如何找到对的人?

如今&#xff0c;朋友圈广告已经“稀松平常”&#xff0c;而用户接收到什么样的商品广告&#xff0c;则基本取决于平日里对微信的使用习惯。无独有偶&#xff0c;淘宝、京东等电商平台在网页中弹出的定向品类广告&#xff0c;也是大数据基于用户对于某一商品的搜索行为。 可见&…

RK3568驱动指南|第七期-设备树-第58章 实例分析:时钟

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…