linux程式設計筆記7 記憶體管理

2021-06-05 02:02:10 字數 1202 閱讀 3535

1.malloc函式可以保證其返回的記憶體是位址對齊的,所以它可以被轉換為任何型別的指標。

2.程式能夠分配大大超出機器物理記憶體容量的記憶體。因為存在「虛擬記憶體」。

3.應用程式所分配的記憶體是由linux核心管理的,核心只是通過使用空閒的物理記憶體來滿足應用程式的記憶體請求,但

是當物理記憶體消耗盡時,它便會開始使用所謂的交換空間。 在linux系統中,交換空間是乙個在安裝系統時分配的獨

立的磁碟區域。

4.應用程式所看到的記憶體是:按需換頁的虛擬記憶體系統. iter看到的所有記憶體全是虛擬的。當所訪問的內存在物理上

並不存在時,就會產生乙個頁面錯誤並將控制權交給核心。

5.當應用程式耗盡所有物理記憶體和交換空間時,或者當最大棧長度被超過時,核心將拒絕此後的記憶體請求,並可能提

取終止程式的執行。

6.在有必要的情況下,核心會把該頁記憶體放入到交換空間中,以騰出實際物理記憶體供程式記憶體申請使用,需要使用時

,再重交換空間提取出來,然後把一塊記憶體放入交換空間。(空間不夠時,需要騰出乙個頁到交換空間,然後讓交換

空間的頁進入記憶體中去。)

7.程式常出的記憶體訪問錯:訪問,寫乙個記憶體塊之後的資料。 即超出了該記憶體塊的寫操作。

8.只有作業系統才知道物理記憶體是如何安排的,它不僅為使用者程式管理記憶體,同時也為使用者程式提供彼此之間的隔離

保護。9。釋放記憶體:使用free(),他會把記憶體釋放給malloc記憶體管理器。這樣分散的記憶體塊又有可能重新合併在一起了哦。

10.呼叫free()使用的指標必須是指向malloc calloc realloc 呼叫所分配的記憶體。

11.free()之後的記憶體是不可以讀寫的哦。由malloc函式庫來接手管理了哦。

12.calloc它所分配的記憶體將全部初始化為0. realloc 函式用來改變先前已經分配好的記憶體塊的長度,增加或則減少

長度。二。檔案鎖定

原子操作:即鎖定時,系統將不允許任何其他的事情發生。

使用鎖檔案,也可以達到程序間的同步協調啊。所有的同步,東東,不虛使用具有全域性性的變數或者檔案,否則無法

通過這些東東來判斷是否被占用,因為他們是不同的程序或者函式,需要協調的話,當然是全域性了哦。

比如:鎖檔案。 他是儲存在磁碟上的,當然具有全域性性, 比如:執行緒訊號量,互斥量,他們是由程序來管理的,而

不是執行緒函式。所以具有全域性。 比如:ipc程序間通訊機制:他們由作業系統來統一管理,所以也可以通過他們來同

步撒。 我去。

7 記憶體管理

0xc0000000 128mb 8mbpagetable init ram896mb 0xc0000000 1g,送去最後的 128mb 剩下896mb ramram 大小在896 4096mb 之間時,核心只能根據頁表定址到其中的 896mb 初始化階段就將 896mb ram128m 0xc0...

記憶體管理 7

支援smp的現代作業系統使用每個cpu上的資料,對於給定的處理器其資料是唯一的。一般來說,每個cpu的資料存放在乙個陣列中。陣列中的每一項對應著系統上乙個存在的處理器。當預處理器號確定這個陣列的當前元素 unsigned long my percpu nr cpus 然後按如下方式訪問它 int c...

linux記憶體管理筆記 十九) 記憶體組織

上一章我們梳理了node,zone,page frame的整個流程,本章就來整理其關係和資料結構之間的關係。numa non uniform memory access,非統一記憶體訪問 和uma uniform memory access,統一記憶體訪問 結點node zone 頁幀page li...