C语言:__attribute__((packed))

一、简介

        在使用结构体的时候,经常要根据结构体的长度来进行相关判断。但是按照C语言的规则,会对不同类型的数据类型进行自动对齐。有时候就会造成一些问题,如果不需要使用自动对齐的功能,就需要使用到本章的关键字。

二、自动对齐

        先看下面这段代码

typedef struct 
{uint32_t c;uint8_t a1; 
}test_data1;typedef struct 
{uint16_t b;uint8_t a1;
}test_data2;void main(void)
{LOG_I(TAG,"test_data 1 sizeof:%d",sizeof(test_data1));LOG_I(TAG,"test_data 2 sizeof:%d",sizeof(test_data2));
}

        看结果:

        可以看到系统对data1和data2都进行了自动对齐,对齐的方式根据结构体第一个元素来区分。data1按照uint32_t的4字节进行对齐。data2按照uint16_t的2字节对齐。所以,data1占8个字节,data2占4个字节。

三、取消自动对齐

         看如下代码

typedef struct 
{uint32_t c;uint8_t a1; 
}__attribute__((packed)) test_data3;typedef struct 
{uint16_t b;uint8_t a1;
}__attribute__((packed)) test_data4;void main(void)
{LOG_I(TAG,"test_data 3 sizeof:%d",sizeof(test_data3));LOG_I(TAG,"test_data 4 sizeof:%d",sizeof(test_data4));
}

        看结果:

        可以看到__attribute__((packed))关键字取消了结构体的自动对齐,data3占5字节,data4占3字节。

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

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

相关文章

ICode国际青少年编程竞赛- Python-4级训练场-while语句入门

ICode国际青少年编程竞赛- Python-4级训练场-while语句入门 1、 while Flyer.disappear():wait() Dev.step(2)2、 Dev.step(1) while Flyer.disappear():wait() Dev.step(5)3、 while Flyer[0].disappear():wait() Dev.step(3) Dev.step(-1) while Flyer[0].disappear():…

爬虫-无限debug场景 解决方式

解决无限debug 场景1 1. 鼠标右键 选择 continue to here(此处不停留)2. 鼠标右键 选择 edite breakpoint 设置 10 保证条件不成立 这行永远不执行3.方法置空 1. 方法调用加断点2. 控制台 setInterval function name() {}4. 替换文件 5. hoo…

【CSDN搜材料的小技巧】怎么快速查到高质量最新的内容

问题描述: 我最近搜CSDN已经搜累了,好多东西明显是有问题的,还有一堆人复制粘贴,从海量文章中提取出最新且高质量文章成了当务之急! 解决方案: 我本来想写个爬虫按照文章的收藏或者点赞排序的,无意中看到了这篇文章…

msix packaging tool打包问题

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

FreeRTOS学习 -- 任务相关API函数

一、任务创建和删除API函数 FreeRTOS 最基本的功能就是任务管理,而任务管理最基本的操作就是创建和删除任务。 FreeRTOS的任务创建和删除API函数如下: 1、函数 xTaskCreate() 此函数用来创建一个任务,任务需要 RAM 来保存于任务有关的状…

子查询之二(不相关子查询与相关子查询)

1. 相关子查询 如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行的条件关联,因此每一次执行一次外部查询,子查询都会重新计算一次,这样的子查询称为关联子查询. 相关子查询按照…

VS配置三方依赖

1.配置include 1.1.打开属性 1.2.打开“配置属性”-"C/C"-"常规" 2.配置lib 2.1.配置lib目录 打开"配置属性"-“链接器”-“常规”。 2.2.配置具体的lib 打开"配置属性"-"链接器"-“输入”。 也可以通过代码方式加入&…

【挑战30天首通《谷粒商城》】-【第一天】【10 番外篇】 解决docker 仓库无法访问 + MobaXterm连接VirtualBox虚拟机

文章目录 课程介绍 1、解决docker 仓库无法访问 2、 MobaXterm连接VirtualBox虚拟机 Stage 1:下载MobaXterm选择适合你的版本 Stage 2:vagrant ssh 连接,开启ssh访问 Stage 2-1:su获取root账号权限,输入密码(默认vagra…

Visual Studio生成C++的DLL文件(最简单版)

前言 当你在使用C编写一些可重用的代码时,将其打包成一个动态链接库(DLL)可以使其更容易地被其他项目或者程序调用和使用。Visual Studio提供了一种简单的方式来生成C的DLL文件。下面是一个关于如何在Visual Studio中生成C的DLL文件的简单教…

力扣HOT100 - 215. 数组中第K个最大元素

解题思路: 快速选择,目标是找出数组中第 k 小(或第 k 大)的元素,而不是对整个数组进行排序。 (需要和快排进行区分,快排的目的是排序) 注意: i l - 1, j r 1; 为什…

羊大师:羊奶助力宝宝成长无忧

羊大师:羊奶助力宝宝成长无忧 在宝宝的成长过程中,营养是至关重要的。随着人们对健康和营养的日益关注,越来越多的家长开始寻找更优质的食品来喂养宝宝。羊奶作为一种营养丰富、易于消化的天然食品,逐渐成为了家长们的首选。 羊奶…

现场工程师出手--虚拟化软件预留内存过大导致其他程序崩溃问题

项目场景: 一位学生有一台笔记本电脑,安装了Android,Kafka虚拟机很多软件。笔记本配置了20GB内存,固态硬盘,但最近很卡,Android Stuido经常闪退,一些游戏也无法运行。 问题描述 由于Android S…

2024最新洗地机选购攻略!分享四款热门洗地机推荐

洗地机可以说是现代家庭生活中一大利器,它能帮我们快速搞定家里的地板清洁工作,省去了自己清洗滚刷的麻烦。不过,当下市面上洗地机品牌种类繁多,价格区间也相差悬殊,要选择一款性价比较高、使用体验较好的洗地机产品&a…

Vision Mamba:高效视觉表示学习双向状态空间模型,超越Vision Transformer!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 引言:探索视觉领域的新方向 在计算机视觉领域&…

beyondCompare工具

目录 一 资源地址 二 过期处理 一 资源地址 链接:https://pan.baidu.com/s/10TxNj0ZvLh2qusYZCPaGRA?pwduq26 提取码:uq26 二 过期处理 过期后删除对应路径下所有文件,重启软件即可

教你解决PUBG绝地求生游戏中闪退掉线无法重连回去的问题

《绝地求生》(PUBG),作为一款在全球范围内掀起热潮的战术竞技游戏,以其栩栩如生的战场环境和令人心跳加速的生存冒险博得了广大玩家的青睐。然而,一些玩家在经历了一场惊心动魄的对局后,却面临了一个不大不…

error C2039: “NotifySeverity“: 不是 “osg“ 的成员 问题分析

程序从osg3.6.5Qt5.9osgearth2.10环境中移植到osg3.7.0Qt5.15.2osgearth3.3环境中,出现了无尽的错误。 有些错误很莫名奇妙,比如下述错误: D:\OsgEarth3.3\include\osgEarth\Notify(34,53): error C2039: "NotifySeverity": 不是 &…

耳朵嗡嗡响,睡不好?张朝晖主任:近几年越来越多年轻人出现耳鸣

王先生,由于工作压力大、应酬多,经常熬夜,心情郁闷情绪差,前不久他发觉自己左耳朵嗡嗡响,还有真正耳鸣,他以为是没休息好,睡两天就好了。 在休假期间好好休息后,耳鸣依然没有改变。…

大模型微调之 在亚马逊AWS上实战LlaMA案例(七)

大模型微调之 在亚马逊AWS上实战LlaMA案例(七) 微调SageMaker JumpStart上的LLaMA 2模型 这是在us-west-2的测试结果。 展示了如何使用SageMaker Python SDK部署预训练的Llama 2模型,并将其微调到你的数据集,用于领域适应或指令…