在應用程式設計過程中,記憶體是很重要的資源,而計算機主機的記憶體資源時有限的。一般而言我們可以申請到的記憶體是有限的,並不是想申請多大就有多大就可以申請多大的。/proc/buddyinfo檔案裡,就記錄著系統的記憶體資源。
linux核心中使用了buddy演算法來管理記憶體以減少記憶體碎片的產生,buddy演算法管理最小的單一為page_size,一般情況下大小為4k。以2的n次冪一次增加。如下圖表示,在normal區中,還有8921個2^0 * page_size可以分配。可以看出如果**中一次性要申請2^9 * 4k記憶體,就會分配失敗。在g++低版本的編譯器會申請結果會返回null,高版本會丟擲異常。所以當服務需要分配大記憶體的時候,需要特別注意一次能分配的最大連續記憶體的大小為2^10 * page_size,其中page_size可以使用getconf pagesize。用c語言可以用 int getpagesize(void)函式獲取,需要包含標頭檔案#include
eg:
wuzm@ubuntu
:~/gocode
$ cat /proc/buddyinfo
node
0, zone dma00
0021
1011
3node
0, zone dma32
7271296
1964
1055
1029
413293
14829
1740
node
0, zone normal
8921
3539
1236
962489
13286141
00 wuzm@ubuntu
:~/gocode
$ getconf pagesize
4096
Linux中許可權
當你在linux下用命令ll 或者ls la的時候會看到這些字眼,這些字眼表示為不同使用者組的許可權 r read就是讀許可權 數字4表示 w write就是寫許可權 數字2表示 x excute就是執行許可權 數字1表示 讀 寫 執行三項許可權可以用數字表示,就是r 4,w 2,x 1。所以,rw...
Linux中控制代碼
1.控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。2.控制代碼不一定是指標。作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,例如map的key,也可能是指標,看作業系統怎麼處理的了。fd算是在某種程度上替代控制代碼吧 linux 有相應機制,但沒...
Linux中的時鐘概念Linux中的時鐘概念
linux的時鐘中斷中涉及至二個全域性變數乙個是xtime,另乙個則是jiffies。有乙個與時間有關的時鐘 實時時鐘 rtc 這是乙個硬體時鐘,用來持久存放系統時間,系統關閉後靠主機板上的微型電池保持計時。系統啟動時,核心 通過讀取rtc來初始化wall time,並存放在xtime變數中,即xt...