技术标签: STM32
1. 什么是字节对齐?
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。
为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的”对齐”. 比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除.
2. 字节对齐有什么作用?
字节对齐的作用不仅是便于cpu快速访问,同时合理的利用字节对齐可以有效地节省存储空间。
对于32位机来说,4字节对齐能够使cpu访问速度提高,比如说一个long类型的变量,如果跨越了4字节边界存储,那么cpu要读取两次,这样效率就低了。但是在32位机中使用1字节或者2字节对齐,反而会使变量访问速度降低。所以这要考虑处理器类型,另外还得考虑编译器的类型。在vc中默认是4字节对齐的,GNU gcc 也是默认4字节对齐。
3. 更改C编译器的缺省字节对齐方式
在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地,可以通过下面的方法来改变缺省的对界条件:
·使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。
·使用伪指令#pragma pack (),取消自定义字节对齐方式。
另外,还有如下的一种方式:
· __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。
· __attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。
4. 举例说明
例1
struct test
{
char x1;
short x2;
float x3;
char x4;
};
由于编译器默认情况下会对这个struct作自然边界(有人说“自然对界”我觉得边界更顺口)对齐,结构的第一个成员x1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界,因此,编译器在x2和x1之间填充了一个空字节。结构的第三个成员x3和第四个成员x4恰好落在其自然边界地址上,在它们前面不需要额外的填充字节。在test结构中,成员x3要求4字节对界,是该结构所有成员中要求的最大边界单元,因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了3个空字节。整个结构所占据空间为12字节。
例2
#pragma pack(1) //让编译器对这个结构作1字节对齐
struct test
{
char x1;
short x2;
float x3;
char x4;
};
#pragma pack() //取消1字节对齐,恢复为默认4字节对齐
这时候sizeof(struct test)的值为8。
例3
#define GNUC_PACKED __attribute__((packed))
struct PACKED test
{
char x1;
short x2;
float x3;
char x4;
}GNUC_PACKED;
这时候sizeof(struct test)的值仍为8。
文章浏览阅读4.7k次。典型的错误提示有: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 msvcrtd.lib(crtexew.obj) _fatal error lnk1120: 2 unresolved externals
文章浏览阅读237次。就问问各位《复仇者联盟》《惊奇队长》《黑寡妇》《超体》这些耳熟能详的电影绝对是部部必看!“寡姐”斯嘉丽·约翰逊是咱们最熟悉的漫威女演员之一“寡姐”的神仙颜值绝对征服了不少的人包括奶茶在内也是爱的不要不要的今天就给大家分享一个斯嘉丽·约翰逊的模型▼▼▼毛发是 XGEN2.0,头发造型虽然只做了一层但看起来越来越像神奇女侠有木有皮肤贴图是Mari4.2v1,Arnold渲染器细节之处处理的非常到位尤其是眼神和皮肤的处理非常细致其实头发在处理上
文章浏览阅读768次。PO(persistent object 持久对象)有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。在hibernate持久化框架中与insert/delet操作密切相关。PO中不应该包含任何对数据库的操作。BO(business object 业务对象)业务对象主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。比如一个简历,有教育经历、工作经历、社会关系等等。我们可以把教育经历对应一个PO,工作经历对应一_bo和vo和to的区别
文章浏览阅读924次,点赞29次,收藏8次。功能:1.对接流量主变现2.影视作品观看3.支持创作者入驻4.PC独立后台管理5.壁纸,表情包下载6.内容管理分类,专题分类7.可单次付费或月会员8.会员开通与支付功能9.微信端使用10.后台数据清晰明11.可定制搭建。介绍:短剧小程序,是自己在后台上传片源,用户充值和看剧一些操作都是在你自己的小程序上进行。以上就是三款短剧系统的介绍,如果想在2024年入局短剧行业 ,可联系:丸子图社 找客服联系搭建即可。前言:短剧系统分为三种:短剧系统、短剧cps分销平台、海外短剧系统。功能:1、支持短剧,小说挂载。_快手短剧分销平台怎么搭建的呢
文章浏览阅读584次。家政服务管理平台采用了B/S结构,JAVA作为开发语言,数据库采用了B/S结构,Mysql数据库进行开发。该系统包括前台操作和后台管理两个部分,一方面,为用户提供首页、服务信息、公告信息、留言反馈、个人中心、后台管理等功能;另一方面,为管理员提供首页、个人中心、用户管理、服务人员管理、服务信息管理、服务类型管理、服务预约管理、服务取消管理、服务分配管理、服务进度管理、评价信息管理、留言反馈、系统管理等功能。_java springboot 毕设
文章浏览阅读215次。题意在一棵有 nnn 个节点的树上,求出有多少个点对 (u,v)(u,v)(u,v) ,满足 uuu 是 vvv 的祖先且 a[u]∗a[v]≤ka[u]∗a[v]≤ka[u]*a[v] ≤k 。 1≤n≤1051≤n≤105 1 \leq n \leq 10^5 0≤ai≤1090≤ai≤109 0 \leq a_i \leq 10^9 0≤k≤10180≤k≤1018 0 \..._dfs作差
文章浏览阅读412次。水平分表把一个大表,拆分成多个小表,大表和小表的字段完全一致,只是小表的数据加一起才是大表的数据(如大表的资料有三个月的人员刷卡资料。小表分别会存一个月的刷卡资料)垂直分表把一个大表,拆分成多个小表。小表的字段总和(除id)等同于大表字段例如:大表字段为id,empno,chname,sex,age,dept则小表1的字段为id,empno,chname,dept小表2的字段为id,empno,sex,age..._水平分表和垂直分表
文章浏览阅读1.9w次,点赞6次,收藏13次。函数助手对话框打开位置2处默认界面点击帮助左边的倒钩三角形,选择所需要的函数Random函数创建${__Random(9000,9999,data)}Random函数使用和csv文件正则提取一样结果Random String函数使用Random string length:随机字符串长度Chars to use for random string generation:用于随机生成字符串的字符Random String函数使用${__RandomString(7,abc1_jmeter获取随机时间撮
文章浏览阅读879次,点赞19次,收藏20次。数字化转型已经成为了企业发展的重要方向,然而数字化转型不仅仅是把线下搬到线上,更重要的是,真正的数字化转型应该以客户的连接和客户的数字化作为突破口。从“以产品为中心”到“以客户为中心”的转变,让客户成为了企业最重要的战略资源之一。CRM通过整合企业营销、销售、服务等业务为一体的企业商业经营策略,可以实现:有效组织企业资源培养以客户为中心的经营行为实施以客户为中心的业务流程……
文章浏览阅读1.5w次,点赞18次,收藏99次。一、相机数学模型 相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的标定算法才能有更好的理解。本人研究了好长时间,几乎每天都重复看几遍,最终才会明白其推导过程。 我觉得首先我们要理解相机模型中的四个平面坐标系的关系:像素平面坐标系(u,v)、像平面坐标系(图像物理坐标第(x,y)、相机坐标系(Xc,Yc,Zc)和世界坐标系(Xw,Yw,Zw),在每一篇介绍相_dlt模型
文章浏览阅读757次。我想在字符串匹配2行之后添加一个新行 .这是我的档案:allow-hotplug eth0auto eth0iface eth0 inet staticaddress 172.16.2.245netmask 255.255.254.0gateway 192.168.1.1allow-hotplug eth1#auto eth1iface eth1 inet staticaddress 192.16..._sed在匹配行后2行插入
文章浏览阅读950次,点赞19次,收藏13次。-userports:redis3:ports:redis4:ports:redis5:ports:redis6:ports:创建文件后,直接启动服务窗口模式后台进程查看启动的进程状态为Up,说明服务均已启动,镜像无问题。