搜索
查看
编辑修改
首页
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
android.intent.action.view设置,Android开发中Intent.Action各种常见的作用汇总
2
安装APK时INSTALL_FAILED_ALREADY_EXISTS的解决办法
3
NLP实践三-----特征选择_pmi点互信息算法特征选择
4
利用 jQuery-photoClip插件 实现移动端裁剪功能并以Blob对象上传
5
【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)...
6
ArkTS调用Native函数的方法_cannot get sourcemap info, dump raw stack
7
vector中删除某个指定元素_vector移除一个
8
自动化构建vue页面_vue可视化自动生成页面以及绑定接口
9
axios封装处理(含携带token请求,token过期处理,请求数据中的大数处理问题)_在地址栏上写携带token的请求路径怎么写格式
10
安装LLVM+Clang教程_clang安装
当前位置:
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博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小丑西瓜9/article/detail/292395
推荐阅读
article
视觉
SLAM
简介
(
限于
初学者
)...
点击上方“3D
视觉
工坊”,选择“星标”干货第一时间送达本文由知乎作者黄浴授权转载,不得擅自二次转载。原文链接:https...
赞
踩
article
内存
池
技术...
为了学习
池
化技术以及后续自行实现一个仿tcmalloc的线程
池
,我们先浅浅的学习一下
池
化的概念,以及简单的实现一个定长的...
赞
踩
article
linux
内存模型_
page
frame
number
...
前面已经分析把物理内存添加到memblock以及给物理内存建立页表映射,这里我们分析内存模型。在Linux内核中支持3种...
赞
踩
article
程序猿进化必读:让
App
的
运行
速度
与
响应
速度
趋于一流(
iOS
)_
软件
响应
速度
一般多少...
程序猿进化必读:让
App
的
运行
速度
与
响应
速度
趋于一流(
iOS
)http://djt.qq.com/bbs/thread-...
赞
踩
article
uniapp
开发
微信
小
程序
-5.
用户
授权登录和
用户
信息
获取
_
uniapp
小
程序
登入只能
获取
性别男...
uniapp
开发
微信
小
程序
-5.
用户
授权登录和
用户
信息
获取
微信
小
程序
中
用户
信息授权 一直是一个非常重要的功能,它有着提...
赞
踩
article
Ubuntu
下
安装
和配置Qtcreator5.15版本_
ubuntu
qt5.15
编译
安装
...
Qt选择在官方的声明中,Qt5.15是Qt5.x的最后一个LTS版本,增加了即将在2020年底推出的Qt6的部分新特性,...
赞
踩
article
微服务启动报错:No
Feign
Client
for
lo
adBalancing
defined
....
微服务启动报错:No
Feign
Client
for
lo
adBalancing
defined
. Did you f...
赞
踩
article
c
语言
:汽车时代...
汽车时代
c
语言
:汽车时代 汽车时代 任务描述 据说看车牌可以知道...
赞
踩
article
《解密
云
计算
:
企业
之选》...
在当今数字化时代,
企业
面临着巨大的数据处理压力和信息化需求,传统的IT架构已经无法满足日益增长的业务需求。在这样的背景下...
赞
踩
article
HCIA
-
Cloud
Service
V3.0 云
服务
工程师知识点汇总_
hcia
-
cloud
-ser...
随着ICT技术的高速发展,企业架构对计算、存储、网络资源的需求更高,急需一种新的架构来承载业务, 以获得持续,高速,高效...
赞
踩
article
js
获取
年月
日
星期
_
js
今天是
什么
年
什么
月
什么
日
星期
几...
js
获取
年月
日
星期
方法
_
js
今天是
什么
年
什么
月
什么
日
星期
几
js
今天是
什么
年
什么
月
什么
日
星期
几 &...
赞
踩
article
芒果
YOLOv8
改进56:提升篇:
从零开始
训练
YOLOv8
最新
8.1
版本
教程说明(包含
Mac
、Wi...
从零开始
训练
YOLOv8
最新
8.1
版本
教程说明(包含
Mac
、
Windows
、
Linux
端 )
_
mac
训练
yolov8
m...
赞
踩
article
TEKTRONIX
泰克
MDO
3014
混合域
示波器
_
泰克
3014
如何联网...
总之,
TEKTRONIX
泰克
MDO
3014
混合域
示波器
是一款功能强大、易于使用的
示波器
,具有广泛的应用和许多优势。它的多...
赞
踩
article
Android
BugReport异常快速排查手册
_
am
_
proc
_
died
...
阅读错误报告无论是任何类型的开发工作,出错都在所难免,而错误报告对于找出和解决问题至关重要。
Android
的所有版本都...
赞
踩
article
DCIC
2024
数据
要素赛道算力
资源
申请
与
使用指南
...
欢迎参赛,大奖等你!
DCIC
2024
数据
要素赛道算力
资源
申请
与
使用指南
云
资源
开通&nbs...
赞
踩
article
基于安卓/
android
/微信小程序的校园
考研
论坛
app
-#计算机
毕业设计
_
android
studi...
随着我国教育的发展,
考研
已经成为当前很多学子的不二选择。
考研
是一个让自己提升到更高平台的选择,所以很多学子在即将毕业之际...
赞
踩
article
python
的
datetime
库使用详解
_
python
datetime
用法...
本章介绍
python
最具代表性
的
的
时间日期库——
datetime
。
datetime
库功能较全,拥有许多其他日期时间库不具...
赞
踩
article
解决
Android
Studio
打开
应用程序
闪退
的
问题
_
androidstudio
模拟器
apk...
在使用
Android
Studio
进行开发时,有时会遇到
应用程序
闪退
的
问题
,这个
问题
通常会在
应用程序
启动后立即崩溃,...
赞
踩
article
二维卡通
数字
人
解决方案
...
还具备强大的可扩展性。美摄科技,凭借在
数字
人领域的深厚积累与不断创新,为企业量身定制了一套高效、灵活的二维卡通
数字
人解决...
赞
踩
article
AI
辅写
疑似
度怎么查:七步教你辨别
文章
是否由
AI
生成
_
论文
ai
生成
怎么检查...
市面上有一些专门的
AI
写作检测工具,可以帮助你快速识别
文章
的
AI
辅写
疑似
度。
AI
写作工具往往遵循一定的模板和模式,
文章
结...
赞
踩
相关标签
服务器
c++
设计模式
linux内核
内存
微信小程序
小程序
uniapp
php
linux
qt5
spring cloud
微服务
启动
报错
Feign
c语言
云计算
javascript
前端
开发语言
YOLO
目标检测
人工智能