|
一直在想有關(guān)內(nèi)存管理方面的問題:下面是我個人對內(nèi)存管理的認(rèn)識,肯定有不到或錯誤之處!請牛人補充或指正錯誤,不勝感激!
為什么需要內(nèi)存管理呢?個人認(rèn)為:1,當(dāng)在程序中定義一個數(shù)組或者一個結(jié)構(gòu)體時,其實就是在向內(nèi)存申請了相應(yīng)的內(nèi)存空間,但是這種申請內(nèi)存的方法只適合于申請小容量的內(nèi)存空間或者只適合于小型程序,如果程序中需要大容量存儲或者程序代碼量很大的話,很有可能內(nèi)存空間會不夠用了,因為數(shù)組或者結(jié)構(gòu)體在整個程序運行當(dāng)中是一直占用內(nèi)存而不能自己釋放的;為了高效利用內(nèi)存,使用內(nèi)存管理的方法就可以解決這個問題,當(dāng)用完了所申請的內(nèi)存空間時,就通過Free()函數(shù)及時將其釋放,使得內(nèi)存可以被反復(fù)使用從而提高了內(nèi)存空間的利用率;2,通過內(nèi)存管理函數(shù)malloc()可以很方便的對申請到的內(nèi)存進行操作,如,向內(nèi)存讀寫數(shù)據(jù),查詢內(nèi)存的使用情況;還有在ISP情況下的使用;3,在uc/os-ii操作系統(tǒng)中也有內(nèi)存管理方面的操作,如內(nèi)存控制塊和對內(nèi)存操作的那幾個函數(shù),一般在操作系統(tǒng)里都有內(nèi)存管理模塊,可見,內(nèi)存管理是很有用的;4,在沒有外擴存儲空間時,還可以將內(nèi)存當(dāng)作flash用。這里所說的內(nèi)存管理只是針對MCU片上內(nèi)存而言,對于STM32,代碼可以存儲在flash和RAM里,而對于大容量存儲介質(zhì)(如SD卡)的數(shù)據(jù)存儲與管理一般用fat32文件系統(tǒng)進行管理,SD卡不能用于存儲代碼(理論上應(yīng)該可以),只是因為各自硬件結(jié)構(gòu)決定的,MCU片上內(nèi)存屬于高速緩沖。如STM32的FSMC是用來擴展存儲空間用的,如LCD的GRAM和IS62WV51216芯片,它們與片上地址形成映射關(guān)系。
總之,個人認(rèn)為學(xué)會并深刻理解數(shù)據(jù)的讀寫或存儲,對于提高嵌入式系統(tǒng)的編程能力很有好處。錯誤之處,敬請指正!
|
|