重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
這篇文章主要為大家展示了“Linux內核環境下怎么申請大塊內存”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Linux內核環境下怎么申請大塊內存”這篇文章吧。
創新互聯建站是一家集網站建設,扎賚諾爾企業網站建設,扎賚諾爾品牌網站建設,網站定制,扎賚諾爾網站建設報價,網絡營銷,網絡優化,扎賚諾爾網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。
在Linux內核環境下,申請大塊內存的成功率隨著系統運行時間的增加而減少,雖然可以通過vmalloc系列調用申請物理不連續但虛擬地址連續的內存,但畢竟其使用效率不高且在32位系統上vmalloc的內存地址空間有限。所以,一般的建議是在系統啟動階段申請大塊內存,但是其成功的概率也只是比較高而已,而不是100%。如果程序真的比較在意這個申請的成功與否,只能退用“啟動內存”(Boot Memory)。下面就是申請并導出啟動內存的一段示例代碼:
void* x_bootmem = NULL; EXPORT_SYMBOL(x_bootmem); unsigned long x_bootmem_size = 0; EXPORT_SYMBOL(x_bootmem_size); static int __init x_bootmem_setup(char *str) { x_bootmem_size = memparse(str, &str); x_bootmem = alloc_bootmem(x_bootmem_size); printk("Reserved %lu bytes from %p for x\n", x_bootmem_size, x_bootmem); return 1; } __setup("x-bootmem=", x_bootmem_setup);
可見其應用還是比較簡單的,不過利弊總是共生的,它不可避免也有其自身的限制:
1.內存申請代碼只能連接進內核,不能在模塊中使用。
2.被申請的內存不會被頁分配器和slab分配器所使用和統計,也就是說它處于系統的可見內存之外,即使在將來的某個地方你釋放了它。
3.一般用戶只會申請一大塊內存,如果需要在其上實現復雜的內存管理則需要自己實現。
在不允許內存分配失敗的場合,通過啟動內存預留內存空間將是我們唯一的選擇。
以上是“Linux內核環境下怎么申請大塊內存”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!