当前位置: 首页 > news >正文

struct内存对齐

5.1.3 struct内存对齐

结构体的对齐规则:

(1)第一个成员在与结构体偏移量为0的地址处。

(2)其他成员变量要对齐到对齐数的整数倍的地址处

对齐数 = 编译器默认的对齐数与该成员大小的较小值。(vs中默认值为8)

(3)结构体总大小为最大对齐数的整数倍。

(4)如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

示例代码:

#include<stdio.h>
#include<stddef.h>struct S1
{char c1;int i;char c2;
};int main()
{printf("该结构体成员 c1 开始的位置为第 %d 个字节\n", offsetof(struct S1, c1));printf("该结构体成员 i 开始的位置为第 %d 个字节\n", offsetof(struct S1, i));printf("该结构体成员 c2 开始的位置为第 %d 个字节\n", offsetof(struct S1, c2));printf("该结构体所占的内存空间为 %d 个字节\n", sizeof(struct S1));return 0;
}
/**输出:
该结构体成员 c1 开始的位置为第 0 个字节
该结构体成员 i 开始的位置为第 4 个字节
该结构体成员 c2 开始的位置为第 8 个字节
该结构体所占的内存空间为 12 个字节*/

分析表格:

结构体变量成员变量自身所占大小编译器默认对齐数对齐数(较小值)
C1181
i484
C2181

示例代码2:

struct S3
{double d;char c;int i;
};struct S4
{char c1;struct S3 s3;double d;
};int main()
{printf("%d\n", sizeof(struct S4));return 0;
}

S3的最大对齐数为 8,它的大小为 16 个字节

首先,毋庸置疑的是 char 先放到首位

接下来因为S3的对齐数为 8,所以S3放在了以位置8开始的16个字节

最后是double,对齐数为8,所以放在了24的位置

最后,该结构体的大小为 4*8 = 32 个字节

相关文章:

struct内存对齐

5.1.3 struct内存对齐 结构体的对齐规则&#xff1a; (1)第一个成员在与结构体偏移量为0的地址处。 (2)其他成员变量要对齐到对齐数的整数倍的地址处 对齐数 编译器默认的对齐数与该成员大小的较小值。&#xff08;vs中默认值为8&#xff09; (3)结构体总大小为最大对齐数…...

探索Redis 6.0的新特性

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存中数据结构存储系统&#xff0c;通常被用作缓存、消息队列和实时数据处理等场景。它的简单性、高性能以及丰富的数据结构支持使其成为了众多开发者和企业的首选。在Redis 6.0版本中&#xff0c;引入了一…...

关于CSS中定位的教程

在CSS中&#xff0c;定位是一种强大的工具&#xff0c;可以帮助我们控制元素在页面上的位置。通过使用定位属性&#xff0c;我们可以精确地放置元素在页面的任何位置&#xff0c;并且可以实现各种复杂的布局效果。在本教程中&#xff0c;我们将深入探讨CSS中的定位属性&#xf…...

抽象类、模板方法模式

抽象类概述 在Java中abstract是抽象的意思&#xff0c;如果一个类中的某个方法的具体实现不能确定&#xff0c;就可以申明成abstract修饰的抽象方法&#xff08;不能写方法体了&#xff09;&#xff0c;这个类必须用abstract修饰&#xff0c;被称为抽象类。 抽象方法定义&…...

消息队列kafka

消息队列解决的问题 1. 解耦&#xff0c;通过消息队列实现应用之间解耦&#xff0c;模块儿之间解耦 2. 跨线程/进程通信&#xff0c;通过消息队列传递数据&#xff0c;实现不同线程/进程间通信 3. 提升系统稳定性&#xff0c;在高并发场景通过消息队列缓冲&#xff0c;可以实…...

复盘成长——2024.2月复盘

复盘的目的和范围 每月一次的精心复盘&#xff0c;不仅是对自身工作成就、学习进步与成长轨迹的深度梳理&#xff0c;更是一种对未来路径的细致规划。通过这一过程&#xff0c;我期望能够更加精准地把握生活的节奏和职场的航向&#xff0c;从中汲取经验、聚焦目标&#xff0c;…...

Kafka安全模式之身份认证

一、简介 Kafka作为一个分布式的发布-订阅消息系统&#xff0c;在日常项目中被频繁使用&#xff0c;通常情况下无论是生产者还是消费者只要订阅Topic后&#xff0c;即可进行消息的发送和接收。而kafka在0.9.0.0版本后添加了身份认证和权限控制两种安全服务&#xff0c;本文主要…...

3、Redis-List【常用】

目录 一、重要特点 二、常用命令 三、Redis中List类型应用场景 一、重要特点 ①Redis中的List&#xff0c;视为双向链表 ②Redis中的List&#xff0c;数据可以重复 二、常用命令 常用命令 格式含义例子rpush key value从右边往key中添加value值rpush hobby java pythonlpu…...

黑马c++ STL部分 笔记(7) list容器

list基本概念 功能&#xff1a;将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a;链表由一系列结点组成结点的组成&#xff1a;一个是存储数据元素…...

关于使用Mxnet GPU版本运行DeepAR报错解决方案

1.引言 我们经常使用GPU来训练和部署神经网络&#xff0c;因为与CPU相比&#xff0c;它提供了更多的计算能力。在本教程中&#xff0c;我们将介绍如何将GPU与MXNet GluonTS一起使用。 首先&#xff0c;确保您的机器中至少有一个Nvidia GPU&#xff0c;并正确安装了CUDA以及CUDN…...

【STM32】江科大STM32学习笔记汇总(50)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…...

LabVIEW非接触式电阻抗层析成像系统

LabVIEW非接触式电阻抗层析成像系统 非接触式电阻抗层析成像&#xff08;NEIT&#xff09;技术以其无辐射、非接触、响应速度快的特点&#xff0c;为实时监测提供了新的解决方案。基于LabVIEW的电阻抗层析成像系统&#xff0c;实现了数据的在线采集及实时成像&#xff0c;提高…...

蓝桥杯备战刷题three(自用)

1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…...

密码学——二次剩余

引言 二次剩余在许多密码学算法和数论问题中具有重要的作用,这个概念涉及到同余方程等概念。 同余 学习二次剩余的概念,首先要了解同余方程的概念,首先默认研究范围为整数,假设 f ( x ) f(x) f(x)是一个整系数多项式,我们讨论是否有整数值x满足同余式 f (...

10.7、华为数通HCIP-DataCom H12-821单选题:121-140

121、关于OSPF特性描述错误的是:D A、OSPF采用链路状态算法。 B、每个路由器通过泛洪 LSA 向外发布本地链路状态信息 C、每台 OSPF 设备都会收集其它路由器发来的LSA 所有的LSA 放在一起便组成了链路状态数据库LSDB, D、OSPF 区域0中所有路由器的 LSDB 都相同。 E、每台…...

多租户篇 | MatrixOne与MySQL全面对比

MySQL 是经典的关系型数据库管理系统&#xff0c;以其简单易用的特性在中小型业务系统中广受开发人员的喜爱。但是MySQL的架构也具有一定的局限性&#xff0c;在需要具备"隔离性"的业务&#xff0c;例如 SaaS 系统或微服务架构等对"数据隔离"及"资源隔…...

python Matplotlib Tkinter-->导出pdf报表

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…...

react-组件基础

1.目标 能够使用函数创建组件 能够使用class创建组件 能够给React元素绑定事件 能够使用state和setState() 能够处理事件中的this指向问题 能够使用受控组件方式处理表单 2.目录 React组件介绍 React组件的两种创建方式 React事件处理 有状态组件和无状态组件 组件中的state…...

The authenticity of host ‘github.com (20.205.243.166)‘ can‘t be established.

1、运行git clone报错&#xff1a; The authenticity of host github.com (20.205.243.166) cant be established. ECDSA key fingerprint is SHA256:p2QAC1TJYererOttrVc98/R1BWERWu3/LiyFdHfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个…...

arduino uno R3驱动直流减速电机(蓝牙控制)

此篇博客用于记录使用arduino驱动直流减速电机的过程&#xff0c;仅实现简单的功能&#xff1a;PID调速、蓝牙控制 1、直流减速电机简介2、DRV8833电机驱动模块简介3、HC-05蓝牙模块简介电机转动测试4、PID控制5、蓝牙控制电机 1、直流减速电机简介 我在淘宝购买的电机&#x…...

Pixel Dimension Fissioner 效果展示:多模态内容生成惊艳作品集

Pixel Dimension Fissioner 效果展示&#xff1a;多模态内容生成惊艳作品集 1. 开篇&#xff1a;重新定义内容创作边界 当第一次看到Pixel Dimension Fissioner生成的作品时&#xff0c;很难相信这些充满创意和细节的内容完全由AI生成。这个多模态模型正在悄然改变我们对内容…...

千问3.5-9B快速部署教程:10分钟在星图GPU平台完成推理服务搭建

千问3.5-9B快速部署教程&#xff1a;10分钟在星图GPU平台完成推理服务搭建 1. 前言&#xff1a;为什么选择千问3.5-9B 千问3.5-9B作为当前轻量级大模型的代表&#xff0c;在保持9B参数规模的同时&#xff0c;展现出接近70B模型的推理能力。对于想快速体验大模型能力又不想折腾…...

Pixel Dimension Fissioner 开发环境配置:Visual Studio Code远程连接GPU服务器

Pixel Dimension Fissioner 开发环境配置&#xff1a;Visual Studio Code远程连接GPU服务器 1. 为什么需要远程开发&#xff1f; 当你开始使用Pixel Dimension Fissioner这类AI模型时&#xff0c;本地电脑的性能可能无法满足需求。GPU服务器提供了强大的计算能力&#xff0c;…...

AudioSeal惊艳效果展示:10米距离录音、电话通话音质下仍可检测水印

AudioSeal惊艳效果展示&#xff1a;10米距离录音、电话通话音质下仍可检测水印 1. AudioSeal音频水印系统概述 AudioSeal是Meta开源的语音水印技术&#xff0c;专为AI生成音频的检测和溯源而设计。这个系统能在各种极端条件下保持水印的可检测性&#xff0c;即使在远距离录音…...

▲基于RBF-Q学习的四足机器人运动协调控制算法matlab仿真

目录 1.引言 2.四足机器人运动学模型 2.1 腿部结构与坐标系 2.2 足端理想轨迹规划 3.RBF-Q学习算法原理 3.1 Q学习基本框架 3.2 RBF神经网络结构 3.3 RBF网络逼近Q值函数 3.4 权重更新规则 4.状态空间、动作空间与奖励函数设计 4.1 状态空间定义 4.2 动作空间定义 …...

容器安全扫描:镜像漏洞检测与运行时保护

容器安全扫描&#xff1a;镜像漏洞检测与运行时保护 随着容器技术的广泛应用&#xff0c;其安全性问题日益凸显。容器安全扫描成为保障云原生环境安全的关键环节&#xff0c;涵盖镜像构建阶段的漏洞检测与运行时的动态防护。本文将深入探讨容器安全的核心实践&#xff0c;帮助…...

阅读《人月神话》与《代码大全》在2024年的新感悟

重读经典&#xff1a;2024年技术书籍的新启示 在AI重构软件开发的2024年&#xff0c;重读《人月神话》与《代码大全》这两本软件工程经典&#xff0c;竟有了超越时代的共鸣。布鲁克斯关于"没有银弹"的论断与麦康奈尔对代码质量的执着&#xff0c;在低代码平台和生成…...

RegisterWriter:ROHM传感器寄存器操作的C++类型安全封装库

1. RegisterWriter 库概述RegisterWriter 是 ROHM 半导体为加速其传感器驱动开发而设计的一套轻量级 C 硬件抽象层&#xff08;HAL&#xff09;辅助库&#xff0c;核心定位并非替代标准 MCU HAL&#xff08;如 STM32 HAL 或 Nordic nRF SDK&#xff09;&#xff0c;而是作为寄存…...

AVR-IoT Cellular Mini底层技术解析:安全蜂窝连接与低功耗设计

1. AVR-IoT Cellular Mini 开发板底层技术解析AVR-IoT Cellular Mini 是 Microchip 推出的面向蜂窝物联网&#xff08;Cellular IoT&#xff09;应用的紧凑型开发平台&#xff0c;其核心价值不仅在于硬件集成度&#xff0c;更在于其构建在 DxCore 基础上的完整 Arduino 兼容软件…...

Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语撑

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时&#xff0c;输出结果中包含大量由集群自动生成的元数据&#xff08;如 managedFields、resourceVersion、uid 等&#xff09;。这些信息在实际复用 yaml 清单时需要手动清理&#xff0c;增加了额外的工作量。 使用 kube…...