日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈MIPS地址对齐问题

發(fā)布時間:2023/12/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈MIPS地址对齐问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.什么叫地址對齊?

RISC 下使用訪存指令讀取或?qū)懭霐?shù)據(jù)單元時,目標地址必須是所訪問之數(shù)據(jù)單元字節(jié)數(shù)的整數(shù)倍,這個叫做地址對齊。

2.計算機主要的架構(gòu)分哪兩類?及其地址對齊在兩者的區(qū)別?

計算機主要的架構(gòu)就分為兩類,復(fù)雜指令集計算機(CISC)和精簡指令集計算機(RISC)。CISC最有代表性的架構(gòu)就是x86,RISC最有代表性的架構(gòu)就是ARM。不管是什么架構(gòu),對要訪問的一定長度的數(shù)據(jù)的地址是有要求的,比如要訪問一個32位的整數(shù),那么這個數(shù)據(jù)必須(最好)存儲在以4字節(jié)(32/8=4)對齊的地方。一般來說,RISC對對齊要求的更嚴格些,非對齊訪問可能會帶來性能上的損失。這對程序在不同架構(gòu)間移植非常重要,因為它極有可能導(dǎo)致你的程序崩潰。

從理論上講似乎對任何類型的變量的訪問可以從任何地址開始,但實際情況是在訪問特定類型變量的時候經(jīng)常在特定的內(nèi)存地址訪問,各個硬件平臺對存儲空間的處理上有很大的不同。一些平臺對某些特定類型的數(shù)據(jù)只能從某些特定地址開始存取。

3.MIPS平臺的地址對齊。

在 MIPS 平臺上,lh 讀取一個半字時,存儲器的地址必須是 2 的整數(shù)倍; lw 讀取一個字時,存儲器的地址必須是 4的整數(shù)倍; sd 寫入一個雙字時,存儲器的地址必須是 8 的整數(shù)倍。倘若訪存時,目標地址不對齊,則會引起異常,典型的是系統(tǒng)提示“總線錯誤”后,直接殺死進程。

直接貼代碼:

1 int main(void){ 2 unsigned int i = 0x12345678;3 4 unsigned char *p = (unsigned char *)&i;5 *p = 0x00;6 unsigned short *p1 = (unsigned short *)(p+1);7 *p1 = 0x0000;8 9 return 0; 10 } ?最后兩句代碼,從奇數(shù)邊界去訪問unsigned short型變量,顯然不符合對齊的規(guī)定。在X86上,類似的操作只會影響效率;但在MIPS或者SPARC上可能導(dǎo)致error,因為它們要求必須字節(jié)對齊。



轉(zhuǎn)載于:https://www.cnblogs.com/nx520zj/p/5653461.html

總結(jié)

以上是生活随笔為你收集整理的浅谈MIPS地址对齐问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。