C++之修改结构体成员字节对齐(二百一十三)

news2024/11/19 23:22:40

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之修改结构体成员字节对齐

2.应用实例

<1>.一般结构体自然对齐

#include <cstdio>

typedef struct{
  char a;
  int b;
} DATA;

int main(void){
  printf("sizeof(DATA)=%ld\n",sizeof(DATA));
}

编译 : g++ test.cpp -o test
运行:./test
打印:
sizeof(DATA)=8

DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。

1byte1byte1byte1byte1byte
a(char)1byte填充1byte填充1byte填充1byte
b(int)1byte1byte1byte1byte

以4byte对齐,1个char类型占4byte(后三个byte填充)和1个int类型占4byte,,一共8个byte,所以 sizeof(DATA)=6。

<2>.使用-fpack-struct=2编译选项按照2byte对齐


编译 : g++ -fpack-struct=2 test.cpp -o test
运行:./test
打印:
sizeof(DATA)=6

DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。

1byte1byte1byte1byte1byte
a(char)1byte填充1byte
b(int)1byte1byte1byte1byte

以2byte对齐,1个char类型占2byte(后一个byte填充)和1个int类型占4byte,一共6个byte,所以 sizeof(DATA)=6。

<3>.使用-fpack-struct编译时,当不指定“n”时,将没有填充字节,所有成员将一个挨着一个排在一起。


编译 : g++ -fpack-struct test.cpp -o test
运行:./test
打印:
sizeof(DATA)=5

DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。

1byte1byte1byte1byte1byte
a(char)1byte
b(int)1byte1byte1byte1byte

1个char类型占1byte和1个int类型占4byte,一共5个byte,中间没有填充字节,一个个挨在一起,所以 sizeof(DATA)=5。

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

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

相关文章

深度优先搜索和广度优先搜索(C++、MATLAB代码迷宫应用)

深度优先搜索算法与广度优先搜索算法及其C、MATLAB代码迷宫应用 1. 深度优先搜索算法&#xff08;DFS&#xff09;1.1 深度优先搜索伪代码&#xff1a;1.2 案例应用&#xff1a;迷宫最小步数1.2.1 DFS算法MATLAB代码1.2.1 DFS算法C代码 2. 广度优先搜索算法&#xff08;BFS&am…

Redis主从复制(Redis6.2.5版本)

1、Redis单击服务问题&#xff1f; Redis的单机服务在实际的应用中会有很多的问题&#xff0c;所以在实际的使用中如果使用了redis服务&#xff0c;往往都不是单机服务&#xff0c;都会配置主从复制或者哨兵机制及redis的集群服务等。 Redis的单机服务&#xff0c;当主机发生机…

nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(四)

到目前为止&#xff0c;虽然基础的formdesigner部分已经完成&#xff0c;但流程用formdesigner提交与审批过程中的显示还有问题。 1、后端部分 其中FormConf修改如下&#xff1a; package com.ruoyi.flowable.core;import lombok.Data;import java.util.List; import java.uti…

慢查询SQL如何优化

一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录&#xff0c;它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…

华为云云耀云服务器L实例评测|基于云耀云服务器在Docker上部署nginx服务

文章目录 1、服务介绍云耀云服务器Docker介绍Docker-Compse介绍 2、在云耀云服务器安装Docker3、通过Docker run命令运行nginx服务4、在云耀云服务器安装docker-compose5、通过docker-compose方式启动nginx服务 1、服务介绍 云耀云服务器 云耀云服务器&#xff08;Hyper Elas…

ArcGIS 10.3安装教程!

软件介绍&#xff1a;ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成地图生产全过程&#xff0c;为地图分析和处理提供了新的解决方…

java高级:动态代理

动态代理介绍、准备功能 这节课我们学习一个Java的高级技术叫做动态代理。首先我们认识一下代理长什么样&#xff1f; 假设现在有一个明星坤坤&#xff0c;它有唱歌和跳舞的本领&#xff0c;作为明星是要用唱歌和跳舞来赚钱的&#xff0c;但是每次做节目&#xff0c;唱歌的时…

多线程和并发编程(3)—AQS和ReentrantLock实现的互斥锁

一、管程模型—MESA模型 管程是什么&#xff1f; 管程就是指管理共享变量&#xff0c;以及对共享变量的相关操作。 在管程的发展史上&#xff0c;先后出现过三种不同的管程模型&#xff0c;分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA模型。 MESA模型…

每日一博 - 反向代理、API 网关、负载均衡

文章目录 概述图解 概述 反向代理、API网关和负载均衡是在网络和服务器架构中用于不同目的的重要组件&#xff0c;它们有不同的功能和应用场景。以下是它们之间的区别和联系&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 功能&#xff1a;反向代理…

Python 数据可视化:Seaborn 库的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

u盘上面 安装 ubuntu 系统

u盘上面 安装 ubuntu 系统 下载 一个 Ubuntu 22.04.3 LTS 桌面版 https://ubuntu.com/download/desktop 找到一个U盘 参考文章&#xff1a; 把 Ubuntu 装到U盘里随身携带&#xff0c;并同时支持 BIOS 和 UEFI 启动 https://www.luogu.com.cn/blog/GGAutomaton/portable-ubu…

【数据结构】串的定义;存储结构;基本操作的实现

欢迎光~临~^_^ 目录 知识树 1、串的定义 2、串的存储结构 2.1顺序存储 静态存储 动态存储 2.2链式存储 2.3串的堆分配存储表示 3、串的基本操作 3.1求子串 3.2比较操作 3.3定位操作 4、C语言实现串的基本操作 知识树 1、串的定义 串是由零个或多个字符组成的…

Oracle,高斯创建自增序列

某些时候,需要获取到一个自增值 然后点击左下 Apply 也可以通过SQL语句执行 dual在Oracle中是张虚拟表&#xff0c;通常用于执行这样的查询 Oracle中查询语句: select 序列名.nextval from dual 在高斯数据库中:查询是 select my_sequence.nextval 不需要加form xxx 也…

微信小程序项目开发Day1

没接触过&#xff0c;直接看视频学习&#xff1a; 千锋教育微信小程序开发制作前端教程&#xff0c;零基础轻松入门玩转微信小程序_哔哩哔哩_bilibili千锋教育微信小程序开发制作前端教程&#xff0c;零基础轻松入门玩转微信小程序共计56条视频&#xff0c;包括&#xff1a;学…

20230914java面经记录

1.mq消息重复消费 2.mq消息堆积 3.如何实现消费的幂等性&#xff08;网站付款成功发货&#xff0c;使用mq做异步通知发货&#xff09; 4.log&#xff0c;debug&#xff0c;warn&#xff0c;error怎么用 5.java基础 6.效率问题 ArrayList a,b;HashSet c,d ;a,b,c,d各自有10…

GDB之修改字符串的值(十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

ESP32主板-MoonESP32

产品简介 Moon-ESP32主板&#xff0c;一款以双核芯片ESP32-E为主芯片的主控板&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;低功耗&#xff0c;板载LED指示灯&#xff0c;引出所有IO端口&#xff0c;并提供多个I2C端口、SPI端口、串行端口&#xff0c;方便连接&#xff0c;…

Claude 使用指南 | 可与GPT-4媲美的语言模型

本文全程干货&#xff0c;让你轻松使用上claude&#xff0c;这也是目前体验cluade的唯一途径&#xff01;废话不多说&#xff0c;直接上教程&#xff0c;cluade的能力不逊于GPT4&#xff0c;号称是ChatGPT4.0最强竞品。相对Chatgpt来说&#xff0c;Claude不仅是完全免费的&…

Prometheus存储容量估算和Prometheus联邦机制

Prometheus最受诟病的一点就是单机存储不好扩展。 Prometheus存储容量估算 根据老师的经验&#xff0c;每秒接收 80 万个数据点&#xff0c;算是一个比较健康的上限&#xff0c;因而一开始也无需用一台配置特别高的机器&#xff0c;随着数据量的增长&#xff0c;以后再升级硬…

图扑可视化图表组件之股票数据分析应用

股市是市场经济的必然产物&#xff0c;在一个国家的金融领域之中有着举足轻重的地位。在过去&#xff0c;人们对于市场走势的把握主要依赖于经验和直觉&#xff0c;往往容易受到主观因素的影响&#xff0c;导致决策上出现偏差。如今&#xff0c;通过数据可视化呈现&#xff0c;…