作為過來人,我發現很多程序猿新手,在編寫代碼的時候,特別喜歡定義很多獨立的全局變量,而不是把這些變量封裝到一個結構體中,主要原因是圖方便,但是要知道,這其實是一個不好的習慣,而且會降低整體代碼的性能。
另一方面,最近有幸與大神「公眾號:裸機思維」的傻孩子交流的時候,他聊到:“其實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
【交叉編譯工具,自行搜索安裝】
-
嵌入式設計
+關注
關注
0文章
392瀏覽量
21351 -
Cortex
+關注
關注
2文章
203瀏覽量
46604 -
ARM架構
+關注
關注
15文章
177瀏覽量
36447
發布評論請先 登錄
相關推薦
基于Armv9架構的MediaTek天璣8400移動芯片問世
Cortex-A55 處理器到底什么來頭?創龍教儀一文帶您了解
Arm Cortex-X925 樹立全新性能標桿,實現人工智能、游戲和多任務處理的先進功能
![Arm <b class='flag-5'>Cortex</b>-X925 樹立全新性能標桿,實現人工智能、游戲和多任務處理的先進功能](https://file1.elecfans.com/web2/M00/09/F3/wKgaomcEuHSAPbsyAAB18vpmWrE160.png)
iTOP-3562開發板/核心板采用RK3562,集成四核A53+Mali G52架構
X86架構處理器有哪些優點和缺點
X86架構和ARM架構有什么區別
ElfBoard技術貼|如何將libwebsockets庫編譯為x86架構
![ElfBoard技術貼|如何將libwebsockets庫編譯為x86<b class='flag-5'>架構</b>](https://file1.elecfans.com/web2/M00/FA/9A/wKgZomaN5gqAKWfTAAA8bsNst_Y484.png)
迅為RK3562核心板四核A53+MaliG52架構,應用于商業平板電腦,視頻會議,智能家居,教育電子,醫療設備,邊緣計算,工業應用
移動端芯片性能提升,Armv9架構新升級引發關注
為何什么risc-v芯片比arm的效率高
鴻湖萬聯成功舉辦基于x86架構的OpenHarmony應用生態挑戰賽
![鴻湖萬聯成功舉辦基于x86<b class='flag-5'>架構</b>的OpenHarmony應用生態挑戰賽](https://file1.elecfans.com/web2/M00/D6/DD/wKgaomYnDqOANCA_AAAUPAg1PAg486.jpg)
適用于ARM? Cortex?-A8/A9 SOC 和 FPGA 的TPS65218電源管理數據表
![適用于ARM? <b class='flag-5'>Cortex</b>?-<b class='flag-5'>A</b>8/<b class='flag-5'>A9</b> SOC 和 FPGA 的TPS65218電源管理數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論