|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
淺談內(nèi)存分配 |
| 作者:eleven11 欄目:ARM技術(shù) |
在arm7上如果合理利用ram,就要利用內(nèi)存分配實現(xiàn)內(nèi)存共享,內(nèi)存分配用的最廣的是塊分配,統(tǒng)一大小的塊仍然會引起內(nèi)存碎片,而且塊越小附加屬性消耗越大,而不同大小的內(nèi)存塊組實際上沒有全局變量組好 在比較小的ram上,要合理利用內(nèi)存資源最好的辦法是實現(xiàn)可變長度內(nèi)存分配,ucgui,zlip都是用的這種方法,仍然有些不足,就是碎片問題,解決辦法可以想lgui那樣預(yù)定義堆空間,當(dāng)堆空間分配完后再從全部內(nèi)存池那里分配內(nèi)存,但當(dāng)堆對象比較多的時候,又引起了一部分浪費,比較折衷的辦法是,當(dāng)需要分配的內(nèi)存比較小的時候,將分配的內(nèi)存從尾部計算,當(dāng)比較大的時候,從頭部開始計算,同時為了快速尋找,分別記錄大內(nèi)存分配的頭和小內(nèi)存分配的頭,當(dāng)釋放的內(nèi)存地址先于記錄的時候,替換頭變量 arm7要合理利用片內(nèi)內(nèi)存實際上要比有mmu的arm9復(fù)雜,遠(yuǎn)沒有一些人想的那么簡單。 |
| 2樓: | >>參與討論 |
| 作者: rockos 于 2006/8/6 22:07:00 發(fā)布:
沒有最好, 也沒有更好, 只的合適與否 管理精細(xì), 通常算法也復(fù)雜, 對于絕大多數(shù)ARM應(yīng)用, 精細(xì)內(nèi)存管理反而不如粗管理的好. 內(nèi)存管理最沒有浪費的就是MZ雙向鏈表, 但是眾所周知, 這個算法也是最脆弱的, 另外還存在嚴(yán)重的內(nèi)存碎片問題. 塊狀內(nèi)存算法在一定程度上避免了碎片問題, 但是帶了來更大的內(nèi)存浪費(除了分配浪費外,控制結(jié)構(gòu)也要預(yù)先分配). 同MZ鏈相比, 有比較大程度的折衷. 還有一些系統(tǒng)在這兩種算法的基礎(chǔ)上引入了更加復(fù)雜的平衡算法,總得來說沒有多大意思。 ARM的地址空間比較大,內(nèi)存資源對于ARM來講是很便宜的,沒有必要精打細(xì)算。對于只有有限內(nèi)存空間的單片機,用全局變量直接分配死也許是最適用的算法。 |
|
| 3樓: | >>參與討論 |
| 作者: eleven11 于 2006/8/7 7:16:00 發(fā)布:
我說的就是arm7片內(nèi)內(nèi)存 他的內(nèi)存很大嗎?只有幾K到幾十K,我沒說掛個8M內(nèi)存的情況,合理的內(nèi)存管理就是內(nèi)存共享,本來單獨的tcp運行需要16K,gui需要32K,這2個加在一起就要48K,合理的進(jìn)行內(nèi)存共享,分段運行,那么32k就夠了 * - 本貼最后修改時間:2006-8-8 6:37:26 修改者:eleven11 |
|
| 4樓: | >>參與討論 |
| 作者: alang7 于 2006/8/7 8:04:00 發(fā)布:
建議樓主做一個模板出來 要練練才知道 |
|
| 5樓: | >>參與討論 |
| 作者: eleven11 于 2006/8/7 10:16:00 發(fā)布:
模塊有啊 * - 本貼最后修改時間:2006-8-7 13:33:01 修改者:eleven11 |
|
| 6樓: | >>參與討論 |
| 作者: paulsimons 于 2006/8/7 13:39:00 發(fā)布:
問個問題 不跑操作系統(tǒng)來說,arm7在什么情況下會用到內(nèi)存,比如,我把arm7當(dāng)單片機用,但在片外加上內(nèi)存,然后跑程序,比如函數(shù)調(diào)用啊,變量啊 等等,一般情況下,都是使用r0,r1,等等,我想知道在什么情況下會使用內(nèi)存來存放需要用到的數(shù)據(jù) |
|
| 7樓: | >>參與討論 |
| 作者: high 于 2006/8/7 17:00:00 發(fā)布:
感覺這好象就是c最大不足之一 更高級語言都會有合理分配和回收機制。有說c++好的多,但還是比不夠。有說java就不錯。 c++里面有大量new,free.而c,我是從來不敢用malloc等函數(shù),反正暫時也不會需要內(nèi)存分配,直接手工分配,所以沒理會。 --------------- 以上一家之言,對內(nèi)存分配了解不夠。 樓上的,就算那樣內(nèi)存還是一定要的。首先提出要求的就是堆棧,否則怎么函數(shù)調(diào)用。 |
|
| 8樓: | >>參與討論 |
| 作者: paulsimons 于 2006/8/8 9:46:00 發(fā)布:
是的, 不知哪位達(dá)人能夠提供C對內(nèi)存使用的原則或規(guī)范,就像arm的atpcs一樣,有據(jù)可依 |
|
| 9樓: | >>參與討論 |
| 作者: 溜溜 于 2006/8/8 11:32:00 發(fā)布:
不要單從語言的角度說, 管他什么樣語言, 只用看看他實現(xiàn)的手段才能說方法好不好, new?free?看看匯編他是怎么樣弄的。你要是覺得好,用C語言不能實現(xiàn)嗎 不要太現(xiàn)象了, |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |