搜索
查看
编辑修改
首页
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
鸿蒙手机操作系统安装,第三手机操作系统下场都不怎么好?鸿蒙好运
2
linux内核中的睡眠函数*delay、*sleep_内核sleep
3
LATEX公式(入门、矩阵、多行公式、常用字符、特殊符号)
4
sora是干什么的:最新详细-易上手教程 | Sora 如何使用?_python sora
5
【diffusers】(一) diffusers库介绍 & 框架代码解析
6
Java程序———定义一个Student类,通过主类调用,其中学生的生日表示方法嵌套DAta类_studentdata类java
7
MyBatis insert操作返回主键_insert selectkey返回主键 parametertype是必须项吗
8
值得一生去看的21个演讲,8部经典励志电影,12部大师纪实片,60部纪录片_励志的记录片推荐
9
两个特征是独立好还是正相关好_文本特征选择和提取
10
基于YOLOv8深度学习的葡萄病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
当前位置:
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
华为
交换机
查看
vlanif
接口
DHCP
地址池下ip具体使用情况命令_华为
交换机
查看
dhcp
分配情况
...
设备华为S5720-28p-LI-ACVRP ® software, Version 5.170 (S5720 V200...
赞
踩
article
温湿度
压力
传感器
——
BME280
,
硬件
开发与
程序设计
_
bme280
相关资料...
温湿度
压力
传感器
——
BME280
,
硬件
开发与
程序设计
目录
温湿度
压力
传感器
——
BME280
,
硬件
开发与
程序设计
前言
硬件
部分...
赞
踩
article
Qt的Pro
文件
解析_
qt
pro
target
...
1.Qt的
pro
文件
和pri
文件
配置2.树结构项目创建_
qt
pro
target
qt
pro
target
...
赞
踩
article
【
Android
12】
Activity
启动
模式_
bringingfoundtasktofront
...
一、
启动
模式google文档的介绍:您可以通过
启动
模式定义
Activity
的新实例如何与当前Task关联。您可以通过...
赞
踩
article
mac
平台
qt
6
程序
调试
_
mac
远程
调试
qt
...
创建工程选择控制台应用输入项目名与保存路径选择编译系统选择语言本地 化选择QT版本项目管理启动
调试
设置断点
调试
输出_ma...
赞
踩
article
2. Qt5 对
工程
文件
的管理_qt
creator
项目
文件
全在
一个
文件
夹...
1. 创建
一个
qt5 程序默认情况下所有的
文件
如下图:如图所有的
工程
文件
都存在
一个
文件
夹中,
工程
文件
数小我们还能一目了然...
赞
踩
article
换掉
Postman
+
Swagger
+
JMeter
,这4个
Java
项目绝了_meters...
不瞒大家,我的收藏夹里可是躺了很多优质的开源项目。像我自己平时遇到了比较感兴趣的开源项目,都会用 Microsoft T...
赞
踩
article
数据
驱动
「加速」洗牌!
小鹏
要
销量
,
Momenta
拿下丰田...
就在去年的
小鹏
汽车科技日活动活动上
,
该公司宣布
,
在进一步开放城市NGP覆盖范围的同时
,
小鹏
汽车将启动影子模式邀请用户参与...
赞
踩
article
移动
应用
崩溃
日志
收集
工具
对比_
uniapp
测试
崩溃
工具
...
背景
移动
互联网时代,由于 Android 设备的碎片化,客服人员每天要接到很多用户反馈在各种不同机型上的
崩溃
问题,又没有...
赞
踩
article
华为
mac
地址
绑定...
华为交换机ip和
mac
地址
绑定 端口绑定2.1 端口绑定命令2.1.1 am user-bind interface【命...
赞
踩
article
YOLOv9
运行报错:
AttributeError
: ‘
FreeTypeFont
‘
object
h...
在网上搜索的结果大部分给出字体不对之类的答案但通过仔细研究,发现该报错的报错原因不是字体不对,而是因为安装了新版本的 P...
赞
踩
article
【
YOLOv5
】
02
-标注
图片
,
训练
并使用自己的模型_
yolo
图片
标注...
安装labelimg使用labelimg
训练
模型使用模型继续
训练
_
yolo
图片
标注
yolo
图片
标注 ...
赞
踩
article
虚拟机中
Ubuntu
与主机
共享
文件夹
_
ubuntu
共享
文件夹
...
虚拟机中
Ubuntu
与主机
共享
文件夹
,及/mnt/hgfs/目录下没有
共享
文件夹
的解决方案_
ubuntu
共享
文件夹
ubu...
赞
踩
article
联通
智网科技张然懋:构筑
车
路网云
协同
加速
车
城
融合
发展
...
在应用场景方面,应充分利用现代城市产生的庞大数据集和人工智能等技术手段,演进出更多场景化创新。实现城市一张图一张网的可持...
赞
踩
article
从一个小实例了解
机器
学习
全过程(《
机器
学习
实战》笔记)_
train
_
set
,
te
st
_
set
= ...
从一个小实例了解
机器
学习
全过程准备工作明确目标选择性能指标查看数据结构我们通过一个
机器
学习
的小实例来对
机器
学习
技术进行一...
赞
踩
article
C++
内存
池
...
内存
池
_c++
内存
池
c++
内存
池
一、
内存
池
的介绍
内存
池
简单说,是为了减少频繁使用 mallo...
赞
踩
article
JDK
目录
介绍(
bin
,
db
,
jre
,
include
,
lib
,
src
)以及
java
c
,
java
命令_...
1.
bin
目录
:用于存放一些可执行程序
,
如:
java
.exe(Java编译器)
,
java
.exe(Java运行工具)
,
j...
赞
踩
article
Android
性能优化之
启动
优化实战篇,附架构师必备技术详解_
android
鸿蒙
系统
启动
优化...
一,
鸿蒙
核心内容掌握程度看看下面这些
鸿蒙
知识点你掌握了多少:基础环境和开发工具开发工具安装运行开发工具完成基础配置Dev...
赞
踩
article
【
微信
小
程序
】
swiper
和
swiper
-
item
组件的基本使用...
微信
小
程序
之
swiper
和
swiper
-
item
组件的基本使用,持续更新【
微信
小
程序
】系列专栏_
swiper
-
item
s...
赞
踩
article
u
ni、
u
view复选框
圆角
_
u
-
checkbox
-gro
u
p改成
圆角
...
u
ni、
u
view复选框
圆角
_
u
-
checkbox
-gro
u
p改成
圆角
u
-
checkbox
-gro
u
p改成
圆角
...
赞
踩
相关标签
交换机
stm32
c语言
qt
开发语言
android
android studio
android-studio
html
css
qt5 工程文件管理
java
postman
自动驾驶
移动开发者
崩溃日志
crash log
bugly
python
pytorch
深度学习
人工智能
YOLO
ubuntu