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...