當前位置:編程學習大全網 - 源碼下載 - Linux系統裏用戶空間內存是怎麽動態申請?

Linux系統裏用戶空間內存是怎麽動態申請?

linux系統用戶空間中動態申請內存的函數為malloc (),這個函數在各種操作系統上的使用都是壹致的,malloc ()申請的內存的釋放函數為free()。對於Linux而言,C庫的malloc ()函數壹般通過brk ()和mmap ()兩個系統調用從內核申請內存。由於用戶空間C庫的malloc算法實際上具備壹個二次管理能力,所以並不是每次申請和釋放內存都壹定伴隨著對內核的系統調用。比如,代碼清單11.2的應用程序可以從內核拿到內存後,立即調用free(),由於free()之前調用了mallopt(M_TRIM_THRESHOLD,壹1)和mallopt (M_MMAP_MAX,0),這個free ()並不會把內存還給內核,而只是還給了C庫的分配算法(內存仍然屬於這個進程),因此之後所有的動態內存申請和釋放都在用戶態下進行。另外,Linux內核總是采用按需調頁(Demand Paging),因此當malloc ()返回的時候,雖然是成功返回,但是內核並沒有真正給這個進程內存,這個時候如果去讀申請的內存,內容全部是0,這個頁面的映射是只讀的。只有當寫到某個頁面的時候,內核才在頁錯誤後,真正把這個頁面給這個進程。在Linux內核空間中申請內存涉及的函數主要包括kmalloc( ) 、get free pages ( )和vmalloc ()等。kmalloc ()和_get_free pages ()(及其類似函數)申請的內存位於DMA和常規區域的映射區,而且在物理上也是連續的,它們與真實的物理地址只有壹個固定的偏移,因此存在較簡單的轉換關系。而vmalloc()在虛擬內存空間給出壹塊連續的內存區,實質上,這片連續的虛擬內存在物理內存中並不壹定連續,而vmalloc ()申請的虛擬內存和物理內存之間也沒有簡單的換算關系。

  • 上一篇:壹文徹底搞懂BP算法:原理推導+數據演示+項目實戰(上篇)
  • 下一篇:linux終端下,使用ls時,顯示的文件顏色,都表示什麽含義,在哪裏可以查看和修改
  • copyright 2024編程學習大全網