C/C++字节对齐

C/C++字节对齐

  • C/C++字节对齐
    • 1.G_PACKED
    • 2.1 pack(push)
    • 2.2 pack(1)
  • 全部例子

C/C++字节对齐

1.G_PACKED

#ifdef __GNUC__#define G_PACKED( __Declaration__ ) __Declaration__ __attribute__((packed))
#else#define G_PACKED( __Declaration__ ) __pragma( pack(push,1)) __Declaration__ __pragma( pack(pop))
#endifG_PACKED(
typedef struct __abc
{uint8_t  Forced_lock; /*< 数据,赋值操作,*/uint32_t  reserve; /*< 数据,赋值操作,预留*/uint8_t  hover_now; /*< 数据,赋值操作,*/
}) abc_s;

2.1 pack(push)

#pragma pack(push) //保存对齐状态
#pragma pack(1)//设定为1字节对齐
typedef struct
{uint8_t msgType;	//消息类型uint16_t exitReason;	//退出原因
} fileTransmitExit_t;
#pragma pack(pop)//恢复对齐状态

2.2 pack(1)

#pragma pack(1) // 按照1个字节对齐
typedef struct
{uint8_t msgType;	//消息类型uint16_t exitReason;	//退出原因
}fileTransmitExit_t4;
#pragma pack() // 取消自定义对齐方式

全部例子

#pragma once
#include <iostream>using namespace std;#ifdef __GNUC__#define G_PACKED( __Declaration__ ) __Declaration__ __attribute__((packed))
#else#define G_PACKED( __Declaration__ ) __pragma( pack(push,1)) __Declaration__ __pragma( pack(pop))
#endifG_PACKED(
typedef struct __abc
{uint8_t  Forced_lock; /*< 数据,赋值操作,*/uint16_t  reserve; /*< 数据,赋值操作,预留*/uint8_t  hover_now; /*< 数据,赋值操作,*/
}) test1;#pragma pack(push) //保存对齐状态
#pragma pack(1)//设定为1字节对齐
typedef struct
{uint8_t msgType;	//消息类型uint16_t exitReason;	//退出原因uint8_t msgType2;
} test2;
#pragma pack(pop)//恢复对齐状态#pragma pack(1)//设定为1字节对齐
typedef struct
{uint8_t msgType;	//消息类型uint16_t exitReason;	//退出原因uint8_t msgType2;
}test3;
#pragma pack()//恢复对齐状态typedef struct
{uint8_t msgType;	//消息类型uint16_t exitReason;	//退出原因uint8_t msgType2;
}__attribute__ ((aligned(1))) test4;typedef struct
{uint8_t msgType;	//消息类型uint16_t exitReason;	//退出原因uint8_t msgType2;
}__attribute__((packed)) test5;int main()
{cout << "Hello World!" << endl;printf("test1 size1:%d\n", sizeof (test1));printf("test2 size2:%d\n", sizeof (test2));printf("test3 size3:%d\n", sizeof (test3));printf("test4 size4:%d\n", sizeof (test4));printf("test5 size4:%d\n", sizeof (test5));return 0;
}

Qt windows 输出结果
在这里插入图片描述
ubuntu2004 linux环境
在这里插入图片描述

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

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

相关文章

sqli-labs靶场详解(less11-less16)

目录 less-11 less-12 less-13 less-14 less-15 less-16 提交参数后 动态参数不存在url中 存在于post表单中 于是在表单中进行注入点测试 先看一看这种提交数据的关卡输入提交后会有什么反应 unameadmin&passwdadmin&submitSubmit 输出 usernameadmin passwordadmin un…

seata集成springboot的一些错误小计

1 seata依赖没找到 dependencies.dependency.version for com.alibaba.cloud:spring-cloud-starter-alibaba-seata:jar is missing. line 126, column 21错误原因:未指定具体的seata版本 解决 <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-st…

Java中弗洛伊德三角

包含连续自然整数的直角三角形被称为弗洛伊德三角形&#xff0c;以计算机科学家罗伯特弗洛伊德的名字命名。它是通过按顺序放置数字而创建的&#xff0c;从顶部的 1 开始&#xff0c;每一行都比前一行多一个数字。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 …

uni-app图片上传

注意&#xff1a; 1、定义&#xff1a;fileList&#xff0c; 2、图片上传请求地址按照自己的修改 async afterReadList(event) { let lastFileIndex this.fileList.length - 1; let remainingCount lastFileIndex > 9 ? 0 : 10 - lastFileIndex; …

vuex的使用笔记

1.安装 npm安装 npm install vuexnext --saveyarn安装 yarn add vuexnext --save2.基本结构 import Vuex from vuexconst store createStore({ //状态&#xff1a;相当于vue中的data&#xff08;&#xff09; state() {return {name: 0,code:"",todos: [{ id: 1…

安卓横竖屏切换后,应用只展示半屏问题 AndroidAutoSize

项目使用的是这个屏幕适配框架&#xff1a;GitHub - JessYanCoding/AndroidAutoSize: &#x1f525; A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版&#xff0c;一个极低成本的 Android 屏幕适配方案). 最近需要做一个特殊设备的横竖屏切换适配&…

稳定视频扩散数据管理解密【stable video diffusion】

Stability AI 最近于 2023 年 11 月 21 日推出了其最新模型—稳定视频扩散&#xff08;SVD&#xff09;。视频生成模型的这一突破取决于数据管理的关键作用。 除了模型检查点之外&#xff0c;他们还发布了一份技术报告。 让我们在 Stability AI 的技术报告和一些引人注目的示例…

js的数组去重方法

目录 es6数组中对象去重 1. filter()用法 2. findIndex()用法 3. 去重 其他方法&#xff1a; 方法二&#xff1a;reduce()去重 1. reduce()用法 1.1 找出字符长度最长的数组成员。 1.2 扁平化二维数组 1.3 扁平化多维数组 三、总结方案&#xff1a; 使用Set&#xf…

我是如何找到人生第一个SRC漏洞的

免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c; 文章作者不为此承担任何责任。 这是一篇新手文章。 因为参加了补天的公益SRC活动&#xff0c;需要提交第一个漏洞&#xff…

armv9的RME简介

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买【加群】ARM/TEE…

基于SSM的咖啡销售系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的咖啡销售系统,java项目。 ecli…

k8s-deployment控制器 5

K8s控制器是Kubernetes&#xff08;简称k8s&#xff09;系统中一个重要的组成部分&#xff0c;它是一个管理Pod的中间层&#xff0c;可以创建和管理多个Pod副本&#xff0c;确保它们按照预定的数量和行为进行运行。 通过编写yaml文件将信息全部存到etcd中&#xff0c;控制器通…

初学Flink 学后总结

最近开始学习Flink,一边学习一边记录,以下是基于【尚硅谷】Flink1.13实战教程总结的笔记,方便后面温习 目录 初始 Flink 一:基础概念 1.Flink是什么 2.Flink主要应用场景

《微信小程序开发从入门到实战》学习三十三

第四章 云开发 本章云开发技术的功能与使用&#xff0c;包括以下几点&#xff1a; 1.学习使用云开发控制台 2.学习云开发JSON数据库功能 3.学习云开文件存储功能 4.学习云函数功能 5.使用云开发技术实现投票小程序的服务端功能 投票小程序大部分已经实现。需要实现&#…

系统设计一些个人小结

一些要记得的数字 关于时间 1天 > 86400秒 关于存储 跟存储有关的K是1024&#xff0c;其它都是1000。下面的数字忽略1000和1024的区别。 1T > 10^12 1G > 10^9 1M > 10^6 1K > 10^3 1B > 10^9 关于网页 1个网页大小按10K估算。下载一个网页按2s估算。 关于…

高端制造业中的通用性超精密3D光学测量仪器

超精密光学3D测量仪器具有高精度、自动化程度高、实时反馈和范围广等优势。它能够实现微米级别的精确测量&#xff0c;能够精确测量产品的尺寸、形状和表面粗糙度等&#xff0c;具有广泛的应用价值和重要意义。 超精密光学3D测量仪器配备多种传感器、控制器和计算机系统&#…

fastadmin框架自带的数据效验

目录 一、fastadmin框架介绍&#xff1a; 注意&#xff1a; 二、fastadmin框架自带效验 三、引用方式&#xff1a; 1.引用&#xff1a; 2.使用案例&#xff1a; 一、fastadmin框架介绍&#xff1a; FastAdmin是基于ThinkPHP和Bootstrap开发的一款开源后台管理系统框架。…

深入理解OS--数值编码

信息的表示和处理 寻址和字节顺序 位于0x100处&#xff0c;int类型值0x01234567在大端和小端下的存储。 字符串的存储不受字节序影响。 移位 1.对左移&#xff0c;右边统一补0 2.对右移&#xff0c;分为算术右移&#xff0c;逻辑右移 算术右移下&#xff0c;左边补原最高有效…

OpenCvSharp从入门到实践-(03)像素

目录 像素 1、确定像素位置 2、获取像素的BGR值 3、修改像素的BGR值 像素 图像数字化是指用数字表示图像&#xff0c;每一幅数字图像都是有M行N列的像素组成的&#xff0c;其中每一个像素都存储一个像素值。计算机通常会把像素值处理为256个灰度级别&#xff0c;这256个灰…

k8s中安装consul集群

一、准备知识 headless services一般结合StatefulSet来部署有状态的应用&#xff0c;比如kafka集群&#xff0c;mysql集群&#xff0c;zk集群等&#xff0c;也包括本文要部署的consul集群。 0、consul集群 consul集群的分布式协议算法采用的是raft协议&#xff0c;这意味着必…