LMA與VMA

LMA英文原版解釋:load memory address:the address at which the section will be loaded。

什么是load memory address钧唐,內(nèi)存裝載地址呢洽损?此處咖楣,單單從名字上供嚎,我們就可以看出幾層意思:

load,裝載骨杂。為什么要裝載呢?因為雄卷,如果想要使你的程序(即經(jīng)歷過搓蚪,由你的源碼,通過編譯器的編譯丁鹉,鏈接器的鏈接妒潭,形成的那個可執(zhí)行文件)悴能,能在內(nèi)存里面運行,那么肯定涉及到這一點雳灾。就是漠酿,有人,把你的這個程序從此處常見的存儲器硬盤里面谎亩,搬到內(nèi)存里面去了炒嘲,然后才有可能運行。而這里的裝載匈庭,就是對應(yīng)這個意思夫凸。就是把程序,從硬盤里面阱持,裝載load夭拌,到內(nèi)存里面去了。對應(yīng)的衷咽,放在內(nèi)存哪里去了呢鸽扁?就是LMA,load memory address兵罢,就是把你的程序中的對應(yīng)的內(nèi)容献烦,詳細點說就是,把其中的.text代碼段卖词,.data數(shù)據(jù)段等內(nèi)容巩那,搬到,也就是copy拷貝到此蜈,內(nèi)存的LMA地址處了即横。。裆赵。

memory內(nèi)存

上面已經(jīng)解釋過了东囚,這里再多說幾句。

程序運行的本質(zhì)战授,就是CPU讀取到指令页藻,然后執(zhí)行,這里就涉及到植兰,如果想要你的程序運行份帐,首先,你應(yīng)該把對應(yīng)的指令放在合適的地方楣导,CPU才能讀到废境,才能執(zhí)行。

此處合適的地方,有人想到噩凹,直接放到硬盤這里巴元,CPU過來讀取,然后執(zhí)行不就可以了嗎驮宴,還不用這么麻煩地將(指令)代碼搬來搬去的逮刨,多省事。但是實際上幻赚,系統(tǒng)就是這么笨地搬來搬去的禀忆,原因在于,從硬盤上直接讀取指令落恼,速度比直接從內(nèi)存箩退,一般pc上各種類型的ram,比如DDR佳谦,此處統(tǒng)稱為memory/內(nèi)存戴涝,要慢很多倍,所以钻蔑,系統(tǒng)才會不嫌棄麻煩啥刻,把代碼拷貝到內(nèi)存里面去,然后從內(nèi)存里面讀取指令咪笑,然后執(zhí)行可帽,這樣效率高很多。

所以窗怒,此處簡單說就是映跟,為了總體效率,對于普通系統(tǒng)扬虚,比如PC努隙,程序的執(zhí)行都是在memory,內(nèi)存里面執(zhí)行的辜昵。因此荸镊,一句話總結(jié)就是:代碼被裝載到內(nèi)存的某個地方,那個地方的地址就叫做LMA堪置。

VMA英文原版解釋:virtual memory address:the address the section will have when output file is run躬存。

那啥是虛擬內(nèi)存地址呢?簡單說就是舀锨,你程序運行時候所對應(yīng)的地址岭洲。

此處所謂的虛擬,一般來說雁竞,指的是啟用了mmu之后钦椭,才有了虛擬地址和實地址。此處碑诉,我們可以簡單地理解為彪腔,就是內(nèi)存的實際地址。程序運行前进栽,要把程序的內(nèi)容德挣,拷貝到對應(yīng)的內(nèi)存地址出,才能運行的快毛。

因此格嗅,一句話總結(jié)就是:代碼要運行的時候,此時對應(yīng)的地址唠帝,就是VMA屯掖。

大多數(shù)情況下,LMA和VMA是一樣的襟衰。也就是被加載到內(nèi)存的什么地方贴铜,也就在什么地方運行。

如果是嵌入式系統(tǒng)瀑晒,也就是相對的“少數(shù)情況”绍坝,LMA和VMA不一樣。而其中最常見的一種情況就是苔悦,程序被放到ROM中轩褐,比如設(shè)置為只讀的Nor Flash中,也就是LMA的地址是Nor Flash的地址玖详,比如隨便舉例為0x10000000把介,而程序要運行的時候的地址是內(nèi)存地址,比如0x30000000竹宋,也就是VMA是0x30000000劳澄,這時候就要我們自己保證,在程序運行之前蜈七,把自己的程序秒拔,從LMA= 0x10000000拷貝到VMA=0x30000000處,然后程序才可以正常運行飒硅。

有人會問砂缩,反正對于ROM來說,CPU也是可以直接從ROM里面讀取代碼三娩,然后運行的庵芭。為何還要前面提到的,弄個LMA和VMA不同雀监,搬來搬去的呢双吆?因為ROM眨唬,顧名思義,是只讀的好乐,只能讀取匾竿,不能寫入的。

而程序中的代碼段蔚万,由于只是被讀取岭妖,不涉及到修改寫入,是沒有問題的反璃。但是對于數(shù)據(jù)段和bss段來說昵慌,里面的所有的程序的變量,多數(shù)都是在運行的時候淮蜈,不僅要讀取斋攀,而且要被修改成新的值,然后寫入新的值的梧田,所以還是放到ROM里面蜻韭,就沒法修改寫入了。而且柿扣,另一個原因是肖方,CPU從ROM,比如常見的Nor Flash中讀取代碼的速度未状,要遠遠小于從RAM俯画,比如常見的SDRAM,中讀取的速度司草,所以艰垂,才會牽扯到將代碼燒寫到ROM里面,然后代碼的最開始埋虹,將此部分程序reload猜憎,重載。也就是從此處的ROM的地址搔课,即LMA胰柑,重新拷貝到SDRAM中去,也就是VMA的地方爬泥,然后從那里運行柬讨。

后記

關(guān)于LMA和VMA:

linker,鏈接器的作用:

將LMA寫到(可執(zhí)行的)二進制文件里面去袍啡。

解析符號踩官。即,把不同的符號境输,根據(jù)符號表中的信息蔗牡,轉(zhuǎn)換成對應(yīng)的地址颖系。此處只涉及VMA,即程序運行時候的地址辩越。

loader集晚,裝載器的作用:

從二進制文件中讀出對應(yīng)的段的信息,比如text区匣,data,bss等段的信息蒋院,將內(nèi)容拷貝到對應(yīng)的LMA的地址處亏钩。此謂,裝載(對應(yīng)內(nèi)容)到裝載地址(LMA)欺旧。

如果發(fā)現(xiàn)VMA != LMA姑丑,即程序運行時候的地址,和剛剛把程序內(nèi)容拷貝到的地址LMA辞友,兩者不一樣栅哀,那么就要把對應(yīng)的內(nèi)容,此處主要是data称龙,數(shù)據(jù)段的內(nèi)容留拾,從剛裝載到的位置,LMA處鲫尊,拷貝到VMA處痴柔,這樣程序運行的時候,找到對應(yīng)的VMA處的變量疫向,才能找到對應(yīng)的值咳蔚,程序才能正常運行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搔驼,一起剝皮案震驚了整個濱河市谈火,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舌涨,老刑警劉巖糯耍,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異囊嘉,居然都是意外死亡谍肤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門哗伯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒揣,“玉大人,你說我怎么就攤上這事焊刹∠等危” “怎么了恳蹲?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俩滥。 經(jīng)常有香客問我嘉蕾,道長,這世上最難降的妖魔是什么霜旧? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任错忱,我火速辦了婚禮,結(jié)果婚禮上挂据,老公的妹妹穿的比我還像新娘以清。我一直安慰自己,他們只是感情好崎逃,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布掷倔。 她就那樣靜靜地躺著,像睡著了一般个绍。 火紅的嫁衣襯著肌膚如雪勒葱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天巴柿,我揣著相機與錄音凛虽,去河邊找鬼。 笑死广恢,一個胖子當著我的面吹牛涩维,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袁波,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓦阐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了篷牌?” 一聲冷哼從身側(cè)響起睡蟋,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枷颊,沒想到半個月后戳杀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡夭苗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年信卡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题造。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡傍菇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出界赔,到底是詐尸還是另有隱情丢习,我是刑警寧澤牵触,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站咐低,受9級特大地震影響揽思,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜见擦,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一钉汗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲤屡,春花似錦损痰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癌刽。三九已至役首,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間显拜,已是汗流浹背衡奥。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留远荠,地道東北人矮固。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像譬淳,于是被迫代替她去往敵國和親档址。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容