国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 信息時代 > Newlib特點

Newlib特點

時間:2022-02-07 16:00:01 | 來源:信息時代

時間:2022-02-07 16:00:01 來源:信息時代

C運行庫的可重入性問題主要是庫中的全局變量在多任務(wù)環(huán)境下的可重入性問題,Newlib解決這個問題的方法是,定義一個struct_reent類型的結(jié)構(gòu),將運行庫所有會引起可重入性問題的全局變量都放到該結(jié)構(gòu)中。而這些全局變量則被重新定義為若干個宏,以errno為例,名為'errno'的宏引用指向struct_reent結(jié)構(gòu)類型的一個全局指針,這個指針叫做_impure_ptr。

對于用戶,這一切都被errno宏隱藏了,需要檢查錯誤時,用戶只需要像其他ANSIC環(huán)境下所做的一樣,檢查errno'變量'就可以了。實際上,用戶對errno宏的訪問是返回_impure_ptr->errno的值,而不是一個全局變量的值。

Newlib定義了_reent結(jié)構(gòu)類型的一個靜態(tài)實例,并在系統(tǒng)初始化時用全局指針_impure_ptr指向它。如果系統(tǒng)中只有一個任務(wù),那么系統(tǒng)將正常運行,不需要做額外的工作;如果希望newlib運行在多任務(wù)環(huán)境下,必須完成下面的兩個步驟:

1)每個任務(wù)提供一個_reent結(jié)構(gòu)的實例并初始化;

2)任務(wù)上下文切換的時刻重新設(shè)置_impure_ptr指針,使它指向即將投入運行任務(wù)的_reent結(jié)構(gòu)實例。

這樣就可以保障大多數(shù)庫函數(shù)(尤其是stdio庫函數(shù))的可重入性。如果需要可重入的malloc,還必須設(shè)法實現(xiàn)__malloc_lock()和__malloc_unlock()函數(shù),它們在內(nèi)存分配過程中保障堆(heap)在多任務(wù)環(huán)境下的安全。

關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉