变量访问被ARM架构安排的明明白白!
作为过来人,我发现很多程序猿新手,在编写代码的时候,特别喜欢定义很多独立的全局变量,而不是把这些变量封装到一个结构体中,主要原因是图方便,但是要知道,这其实是一个不好的习惯,而且会降低整体代码的性能。
另一方面,最近有幸与大神「公众号:裸机思维」的傻孩子交流的时候,他聊到:“其实Cortex在架构层面就是更偏好面向对象的(哪怕你只是使用了结构体),其表现形式就是:「Cortex所有的寻址模式都是间接寻址」——换句话说「一定依赖一个寄存器作为基地址」。
举例来说,同样是访问外设寄存器,过去在8位和16位机时代,人们喜欢给每一个寄存器都单独绑定地址——当作全局变量来访问,而现在Cortex在架构上更鼓励底层驱动以寄存器页(也就是结构体)为单位来定义寄存器,这也就是说,同一个外设的寄存器是借助拥有同一个基地址的结构体来访问的。”
以Cortex A9架构为前提,下面一口君详细给你解释为什么使用结构体效率会更高一些。
一、全局变量代码反汇编
1. 源文件
「gcd.s」
.text
.global _start
_start:
ldr sp,=0x70000000 get stack top pointer
b main
「main.c」
* main.c
*
* Created on: 2020-12-12
* Author: pengdan
int xx=0;
int yy=0;
int zz=0;
int main(void)
{
xx=0x11;
yy=0x22;
zz=0x33;
while(1);
return 0;
}
「map.lds」
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x40008000;
. = ALIGN(4);
.text :
{
gcd.o(.text)
*(.text)
}
. = ALIGN(4);
.rodata :
{ *(.rodata) }
. = ALIGN(4);
.data :
{ *(.data) }
. = ALIGN(4);
.bss :
{ *(.bss) }
}
「Makefile」
TARGET=gcd
TARGETC=main
all:
arm-none-linux-gnueabi-gcc -O1 -g -c -o $(TARGETC).o $(TARGETC).c
arm-none-linux-gnueabi-gcc -O1 -g -c -o $(TARGET).o $(TARGET).s
arm-none-linux-gnueabi-gcc -O1 -g -S -o $(TARGETC).s $(TARGETC).c
arm-none-linux-gnueabi-ld $(TARGETC).o $(TARGET).o -Tmap.lds -o $(TARGET).elf
arm-none-linux-gnueabi-objcopy -O binary -S $(TARGET).elf $(TARGET).bin
arm-none-linux-gnueabi-objdump -D $(TARGET).elf > $(TARGET).dis
clean:
rm -rf *.o *.elf *.dis *.bin
【交叉编译工具,自行搜索安装】

图片新闻
最新活动更多
-
7月3日立即报名>> 【在线会议】英飞凌新一代智能照明方案赋能绿色建筑与工业互联
-
7月22-29日立即报名>> 【线下论坛】第三届安富利汽车生态圈峰会
-
7.30-8.1火热报名中>> 全数会2025(第六届)机器人及智能工厂展
-
7月30-31日报名参会>>> 全数会2025中国激光产业高质量发展峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 【在线会议】Solution Talks |Computex 2025关键趋势深读
推荐专题
- 1 数智破局·生态共生:重构全球制造新引擎 2025 WOD制造业数字化博览会即将在沪盛大启幕
- 2 【重磅来袭】6月17日上海见!全球智造巨头聚首,60余场前沿论坛,制造业数字化盛会邀您共启数智破局之旅!
- 3 安森美正式参评“维科杯·OFweek 2025中国工业自动化与数字化行业优秀产品奖”
- 4 抢先解锁!全数会2025机器人及智能工厂展览会核心亮点速递
- 5 硬核登场!凌科LP-12系列 90°工业级连接器上市,打造行业高可靠连接解决方案
- 6 【最后召集】6月17-19日,60+论坛剧透制造业未来,200+全球巨头携制造业黑科技齐聚,制造业数字化转型巅峰盛会即将启幕!
- 7 4.77 亿募资!年赚 1.11 亿的智能配电 “小巨人” 冲刺创业板,在手订单超 6 亿!
- 8 欧姆龙正式参评“维科杯·OFweek 2025中国工业自动化与数字化行业优秀产品奖”
- 9 安川电机 1.8 亿美元美国扩张计划,欲破局全球竞争?
- 10 2025“高德智感杯”全国国防体育大联动暨首届河北省国防体育运动英雄全能冠军赛落幕
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论