Newlib關于malloc
時間:2022-02-07 16:40:01 | 來源:信息時代
時間:2022-02-07 16:40:01 來源:信息時代
大多數嵌入式操作系統(tǒng)都實現了自己的動態(tài)內存分配機制,并且提供了多任務環(huán)境下對內存分配機制的保護措施,如果移植newlib到這樣的系統(tǒng)時,可以放棄newlib自帶的malloc函數。盡管newlib自帶的malloc非常高效,但是幾乎所有的用戶都習慣使用malloc來作為動態(tài)內存分配器。在這種情況下,最好對系統(tǒng)自帶的動態(tài)內存分配API進行封裝,使它不論在風格、外觀上,還是在語義上都與malloc完全相同,這對于提高應用程序的可移植性大有好處。
對于那些沒有實現動態(tài)內存分配機制的嵌入式系統(tǒng)環(huán)境來說,newlib的malloc是一個非常好的選擇,只需實現sbrk樁函數,malloc就可以非常好地工作起來。與之同名的POSIX系統(tǒng)調用的作用是從系統(tǒng)中獲得一塊內存,每當malloc需要更多的內存時,都會調用sbrk函數。
在單任務環(huán)境下,只需實現sbrk樁函數,malloc就可以正常運行;但在多任務環(huán)境下,還需實現__malloc_lock()和__malloc_unlock()函數,newlib用這兩個函數來保護內存堆免受沖擊。用戶可利用目標環(huán)境中的互斥信號量機制來實現這兩個函數,在__malloc_lock()函數中申請互斥信號量,而在__malloc_unlock()函數中釋放同一個互斥信號量。