作為過來人,我發(fā)現(xiàn)很多程序猿新手,在編寫代碼的時候,特別喜歡定義很多獨立的全局變量,而不是把這些變量封裝到一個結(jié)構(gòu)體中,主要原因是圖方便,但是要知道,這其實是一個不好的習慣,而且會降低整體代碼的性能。
另一方面,最近有幸與大神「公眾號:裸機思維」的傻孩子交流的時候,他聊到:“其實Cortex在架構(gòu)層面就是更偏好面向?qū)ο蟮模呐履阒皇鞘褂昧私Y(jié)構(gòu)體),其表現(xiàn)形式就是:「Cortex所有的尋址模式都是間接尋址」——換句話說「一定依賴一個寄存器作為基地址」。
舉例來說,同樣是訪問外設寄存器,過去在8位和16位機時代,人們喜歡給每一個寄存器都單獨綁定地址——當作全局變量來訪問,而現(xiàn)在Cortex在架構(gòu)上更鼓勵底層驅(qū)動以寄存器頁(也就是結(jié)構(gòu)體)為單位來定義寄存器,這也就是說,同一個外設的寄存器是借助擁有同一個基地址的結(jié)構(gòu)體來訪問的。”
以Cortex A9架構(gòu)為前提,下面一口君詳細給你解釋為什么使用結(jié)構(gòu)體效率會更高一些。
一、全局變量代碼反匯編
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
【交叉編譯工具,自行搜索安裝】
-
嵌入式設計
+關(guān)注
關(guān)注
0文章
393瀏覽量
21636 -
Cortex
+關(guān)注
關(guān)注
2文章
203瀏覽量
47117 -
ARM架構(gòu)
+關(guān)注
關(guān)注
15文章
181瀏覽量
36961
發(fā)布評論請先 登錄
瑞迅科技RK3568主板賦能健康檢測一體機創(chuàng)新應用

iTOP-3588S開發(fā)板四核心架構(gòu)GPU內(nèi)置GPU可以完全兼容0penGLES1.1、2.0和3.2。
迅為iTOP-RK3588S開發(fā)板/核心板瑞芯微RK3588S處理器6TOPS算力內(nèi)置NPU
Arm發(fā)布基于Armv9架構(gòu)的Cortex-A320處理器
基于Armv9架構(gòu)的MediaTek天璣8400移動芯片問世
Cortex-A55 處理器到底什么來頭?創(chuàng)龍教儀一文帶您了解
結(jié)構(gòu)體成員的順序會影響結(jié)構(gòu)體的大小嗎
Arm Cortex-X925 樹立全新性能標桿,實現(xiàn)人工智能、游戲和多任務處理的先進功能

iTOP-3562開發(fā)板/核心板采用RK3562,集成四核A53+Mali G52架構(gòu)
X86架構(gòu)處理器有哪些優(yōu)點和缺點
X86架構(gòu)和ARM架構(gòu)有什么區(qū)別
聚徽-一體工控機為何會死機
迅為RK3588S開發(fā)板廣泛用于邊緣技術(shù),人工智能,智能家居,智慧零售,智能網(wǎng)關(guān)等
ElfBoard技術(shù)貼|如何將libwebsockets庫編譯為x86架構(gòu)

評論