搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小丑西瓜9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
资深架构师亲授:Java开发中的那些坑,你避开了吗?_java开发坑点解析:从根因分析到最佳实践 pdf 下载
2
冷热数据浅浅见_冷热数据识别原理
3
微信小程序 - 使用 uni-app 开发小程序以及部分功能实现_uniapp开发微信小程序
4
互联网大厂面试最常见的1109 道java 面试题(附答案分享)_大厂java面试题
5
SpringMVC自定义日期转换器不起作用,报400错误,Failed to convert value of type xxx to required type xxx_resolved [org.springframework.web.method.annotatio
6
Diffusion的火,只是AIGC的缩影 | 量子位智库报告(附下载)
7
笔记《为什么:关于因果关系的新科学》:深度一(得到)_科学承认因果关系吗
8
android11源码编译及模拟器安装_android如何把新编译的包装进模拟器中
9
【软件测试】性能测试中,最常遇到的8个问题总结_压测持续时间长短有什么区别?压测持续时间长,保证效果更接近期望值?设置压测时间
10
MAC shell指令用法_mac shelly运行命令
当前位置:
article
> 正文
arm 结构体对齐问题_arm 结构体 对齐32位
作者:小丑西瓜9 | 2024-03-23 02:02:09
赞
踩
arm 结构体 对齐32位
Arm结构体gcc内存边界对齐问题
这段时间移植公司的linux i386程序到Arm linux平台,本以为是件工作量很小的事情,以为只要改几个驱动程序就OK了,没想到在应用程序这一块卡了很长时间。其中最烦的事情就莫过于结构体内存边界对齐了。搞了这么久,终于终结了一些小经验。
默认情况下,在32位cpu里,gcc对于结构体的对齐方式是按照四个字节来对齐的。看以下结构体
typedef struct pack{
char a;
int b;
short c;
}pack;
对于Pack结构体,默认情况下在arm/386平台下(别的平台没试过)sizeof(pack)=12,求解过程如下:
sizeof(char)=1;
下一个int b,由于是四个字节,要求b的开始地址从32的整数倍开始,故需要在a后面填充3个没用的字节,记为dump(3),sizeof(b)=4,此时相当于结构体扩充为
char a;
char dump(3);
int b;
看short c,现在c的前面有8个字节,c是两个字节,c的开始地址是从16的整数开始,在b前面不需再加东西.此时对于结构体来说,sizeof(pack)=10,但是这不是最终结果,最后总的字节数也要能被4个字节整除,所以还需在short c后面再加
dump(2);
故总的字节数为12.
当然以上说的只是简单的情况,下面谈谈Arm,x86在gcc里关于内存边界字节对齐的区别.对于同样的结构体,在386下
#prama pack(1)
后,sizeof(pack)=1 4 2=7
而在arm下同样的操作sizeof(pack)=1 4 2 1=8,即虽然b根a之间不要填充但总的长度必须要是4的整数倍.
在ARM 下要使结构体按指定字节对齐,可行的方法
1.在makefile里加-fpack-struct 选项,这样的话对所有的结构按一字节对齐.
不得不说,确实有那么些质量较差的程序可能需要你部分自然对齐,部分一字 节对齐,此时
2. typedef struct pack{
}__attribute__((packed))
可利用__attribute__属性
当然最后的方式,还是自己去看ARM体系结构与gcc编译选项了。
------------------------------------------------------------------------------------------------------------
浅谈结构体对齐问题
#include <stdio.h>
int main() {
struct ms {
double x;
char a;
int y;
};
// }__attribute__((packed));
printf("%d/n", sizeof(struct ms));
return 0;
}
linux上运行,结果为16;
声明:
本文内容由网友自发贡献,转载请注明出处:
【wpsshop】
推荐阅读
article
van
t
中
van
-
address
-
edit
地址
编辑
地址
回显获取
areaCode
_
van
t
地址
...
van
t
中
van
-
address
-
edit
地址
编辑
地址
回显获取
areaCode
_
van
t
地址
编辑回显
van
t
地址
...
赞
踩
article
机器
学习
相似
度
度量
_
ai
实现多元属性的
相似
性
度量
...
在
机器
学习
中,无论是分类问题、聚类问题或降维问题,经常需要
度量
不同样本之间的
相似
性
。不过如何友好地表征不同样本之前的
相似
...
赞
踩
article
gradle
打包
_
gradle
8.6 自定义
打包
...
【代码】
gradle
打包
。_
gradle
8.6 自定义
打包
gradle
8.6 自定义
打包
...
赞
踩
article
【
ChatGLM3
】(7):在
autodl
上
,
使用A50显卡
,
使用
LLaMa
-
Factory
开源项目...
工具还是
非常
的
简单
,
可以
把机构参数进行设置下。主要就是把参数可视化
,
同时把结果也可视化。
非常
的
方便
。进度也
可以
看到。_c...
赞
踩
article
rk3566
-安卓
11
-千兆网卡
rtl82
11
f
移植_
瑞芯微
rtl82
11
cf
驱动
...
默认情况只亮一颗黄灯, 需要将另一颗绿灯点亮. 查看芯片手册, RTL82
11
F 的寄存器读写, 首先需要将要操作的 A...
赞
踩
article
spring
boot
修复
Spring
Framework
URL解析不当
漏洞
(CVE-2024...
一开始我们尝试直接替换
spring
-web的版本,但是只替换这一个包的话项目启动会报错,通过实践和反复尝试,我们对spr...
赞
踩
article
小
程序
swiper
轮播
页(
点击
事件
)_微信小
程序
swiper
-
item
点击
事件
...
Swiper
轮播
页组件 属性 indicator-dots:是否现实面板知识点(小店) indicator-color:...
赞
踩
article
TensorFlow
:好用的
时间
序列训练测试集生成器(
Python
)_
disparseinput
t...
TensorFlow
:好用的
时间
序列训练测试集生成器(
Python
)前言一、tf.keras.preprocessing...
赞
踩
article
在
nodejs
项目中封转
mysql2
的
数据
连接
...
如果是自己使用node开发接口,那就需要链接mysql, 既然要
连接
数据
库存储
数据
,那就说明不是只用一次就完事了,需要频...
赞
踩
article
linux
下的
环境变量
的配置_
linux
中
usr
/
local
中
没有
trolltech
...
在Linux
中
设置Qt
环境变量
(1)2011-06-14 09:21 佚名 互联网 我要评论(0) 字号:T | T本文...
赞
踩
article
鱼眼
摄像头
SLAM
_
鱼眼
slam...
鱼眼
摄像头
SLAM
在机器人技术、摄影测量学和计算机视觉等领域,鲁棒相机位姿估计是许多视觉应用的核心。近年来,在复杂、大规...
赞
踩
article
Qt
5.15
.1
Android
开发
环境
搭建_
qt
开发
手机端
环境
配置...
开发
环境
:
Qt
版本:
Qt
5.15
.1
环境
:Windows 10。_
qt
开发
手机端
环境
配置
qt
开发
手机端
环境
配置 ...
赞
踩
article
C++
习题三——
指针
与
数组
_从
键盘
上
输入
n
个
整数
(
n
<
100
),按
输入
顺序和相反的顺序
输出
这
n
个
整数
...
1.改错题修改以下程序,并给出正确代码及运行结果(截图):(1)
键盘
输入
n
个
整数
,并逆序
输出
。代码:结果:(2)
输出
打印...
赞
踩
article
十年汇总!全面回顾
主动
SLAM
:现状、局限及
未来
方向!_
视觉
slam
研究
现状...
点击下方卡片,关注“自动驾驶之心”公众号ADAS巨卷干货,即可获取点击进入→自动驾驶之心【
SLAM
】技术交流群后台回复【...
赞
踩
article
微信
小
程序
swiper
不限
数量
不卡顿轮播图优化组件(含
uniapp
版
和纯
微信
开发者
工具
版
),欢迎打包...
uniapp
微信
小
程序
swiper
无限
数量
不卡顿轮播图组件,有
uniapp
框架
版
本和纯
微信
小
程序
开发
工具
版
本_swipe...
赞
踩
article
激光
SLAM
基础(
1
) ——
激光
SLAM
框架和基本
数学
理论_二维
激光
三维
激光
slam
...
激光
SLAM
笔记(
1
)——
激光
SLAM
框架和基本
数学
理论
1
、
SLAM
分类
1
.
1
、基于传感器的分类
1
.2、基于后端的分类2...
赞
踩
article
示波器
操作
说明
_
示波器
的
使用
方法...
示波器
操作
说明
一、 面板
说明
。
示波器
面板见下图1、 Run/Stop 停止/运行按钮2、 Single 单次触发按钮/按...
赞
踩
article
【鸿蒙
应用
开发
】 【HCIA认证】学习笔记
1
_某
开发
者在
开发
模块
服务
卡片
应用
时,
需要
注意该
应用
的
免安...
文章目录
1
.page生命周期2.跨设备迁移Page3.原子化
服务
4.config.json5.visibility6.权...
赞
踩
article
ZYNQ
平台
rtl8211
f-cg
phy
初始化
随笔_
zynq
rtl8211
...
ZYNQ
下面的网卡
初始化
问题,随笔记录一下_
zynq
rtl8211
zynq
rtl8211
...
赞
踩
article
MySQL8.0
下载
、
安装
、配置...
官网:MySQL。_mysql8.0
下载
mysql8.0
下载
一、软件
下载
1.
下载
地址 官网...
赞
踩
相关标签
前端
vue.js
机器学习
相似性计算
马氏距离
夹角余弦
闵可夫斯基距离
java
gradle
llama
chatglm3
大模型
android
linux
驱动开发
c语言
嵌入式硬件
安全
CVE-2024-22243
spring boot
漏洞修复
swiper
小程序轮播页
python
tensorflow