Linux使用者空間記憶體是怎麼動態申請?

2025-02-19 17:00:14 字數 1068 閱讀 4641

1樓:重慶新華電腦學校

使用者空間中動態申請記憶體的函式為malloc ()這個函式在各種作業系統上的使用都是一致的,malloc ()申請的記憶體的釋放函式為free()。對於linux而言,c庫的malloc ()函式一般通過brk ()和mmap ()兩個系統呼叫從核心申請記憶體。由於使用者空間c庫的malloc演算法實際上具備乙個二次管理能力,所以並不是每次申請和釋放記憶體都一定伴隨著對核心的系統呼叫。

比如,**清單的應用程式可以從核心拿到記憶體後,立即呼叫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 ()申請的虛擬記憶體和實體記憶體之間也沒有簡單的換算關係。

2樓:開源大衛來了

可以去找找函式為 malloc() realloc()函式 free()

在使用者空間動態申請記憶體的函式為 malloc(),這個函式在各種作業系統上的使用是一致的,malloc()申請的記憶體的釋放函式為 free()。malloc()的記憶體一定要被 free(),否則會造成記憶體洩漏。理想情況下,malloc()和 free()應成對出現,即誰申請,就由誰釋放。

linux就該這麼學》

linux下什麼是共享記憶體,怎麼檢視

程序通過呼叫shmget shared memory get,獲取共享記憶體 來分配一個共享記憶體塊。該函式的第一個引數是一個用來標識共享記憶體塊的鍵值。彼此無關的程序可以通過指定同一個鍵以獲取對同一個共享記憶體塊的訪問。不幸的是,其它程式也可能挑選了同樣的特定值作為自己分配共享記憶體的鍵值,從而產...

linu怎麼給使用者root許可權,linux怎麼給一個使用者root許可權

賦予root許可權方法一 修改 etc sudoers 檔案,找到下面一行,把前面的註釋 去掉 allows people in group wheel to run all commands wheel all all all 然後修改使用者,使其屬於root組 wheel 命令如下 usermo...

linu怎麼切換使用者linux怎麼切換使用者?

linux系統中使用者切換的命令為su。1 命令格式及引數 su fmp c mand s shell help version user arg 引數說明 f fast 不必讀啟動檔案 如 csh.cshrc 等 僅用於csh或tcsh兩種shell。l login 加了這個引數之後,就好像是重新...