malloc
小於128k, 使用brk函式,堆頂會有乙個enddata指標記錄堆區位置,從而在虛擬記憶體位址空間中建立記憶體
真正使用時,還要將其通過對映變成實體地址。
程式第一次讀寫這塊記憶體後,發生缺頁中斷(訪問的頁不在主存,需要作業系統將其排程),這時,才會分配給他物理頁。
大於128k
使用mmap,在堆和棧之間分配記憶體。
free
mmap建立的直接munmap
brk的不釋放,當enddata指標後面有128k空餘時,指標回移。
const
int a = 0, b = 0;
const int* c = &a;
c = &b;
int* const d = &b;
*d = a;
沒有直接和const連線的是可以改變的。
動態庫、靜態庫
動態庫:
exe中只包含它需要的函式的引用表,執行時,需要的函式**才會拷貝到記憶體中。
可執行檔案小,節省磁碟節省記憶體,但在執行的時候需要時間去連線庫函式,執行速度較慢
動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在
靜態庫:
將所有需要使用的函式作為機器碼拷貝到最終的執行檔案中,導致最終生成的則執行檔案占用磁碟和記憶體空間大
但速度較快。
靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。
三次握手四次揮手時連線雙方各自的狀態
三次握手:
1、client----->syn(1)seq(x) syn_send
2、server---->syn(1)ack(1)seq(y)ack(x+1) syn_recv
3、client------>ack(1)seq(x+1)ack(y+1) client/server-->established
四次揮手:
1、client---->fin(m) fin_wait1
2、server--->ack(m+1) close_wait ----->client fin_wait2
3、server--->fin(n) last_ack
4、client----->ack(n+1) time_wait ----->server closed
time_wait過多的原因
過多的主動關閉連線
close_wait過多的原因
應用層關係
對方發起了關閉,但己方依舊在讀寫,沒有關閉連線。
tcp復用
一致性hash
虛擬記憶體、物理記憶體頁 頁幀 頁表
頁:虛擬記憶體
頁幀:物理記憶體
頁表:頁和頁幀一對一的對映表
頁面失效:找到頁幀,將其寫入磁碟,並讓其失效,並將需要訪問的頁放入頁幀中(從虛擬記憶體轉入物理記憶體)
並修改頁表的對映,從而保證所有的也都有被排程的可能。
虛擬頁的個數勢必比物理頁幀的個數大
頁號+偏移量 == 虛擬記憶體位址
頁號---》尋找頁幀號---》檢視是否存在記憶體中---》排程---》傳到mmu組成實體地址
近幾天的總結
這幾天學習了圖論,稍微有點感觸。首先在知識層面已經學得差不多了,除了2sat和難度深一點的差分約束可能還有點玄乎,在之後幾天的資料結構學習中,一定要下功夫鑽研!有幾個板塊必須鑽研下去,乙個就是線段樹包括亂七八糟的樹套樹,其次就是平衡樹splay這些玩意,還有就是稍微學習一下lct,替罪羊樹,和虛樹,...
近幾天的計畫
1 測試外掛程式平台,前幾天抽空寫了個以dll形式的外掛程式平台,測試demo已經過了,感覺還有些不細緻的地方,再細測一下 2 移植幾個控制項,因為平常使用不少控制項包,又有自己蒐集的一些,在新的環境裡安裝時,有時會報這個不存在,那個重複什麼的,正好上邊的外掛程式平台也用到一些控制項,不如自己移植一...
最近幾天的工作總結
快取真的很重要,這幾天在做資訊採集的過程中,需要動態的生成程式集,原先沒有採用任務的措施,不斷的生成新的程式集,使程式的記憶體漲到1g,導致out of memory,後來對其施加了快取及同步的控制 因為是多執行緒的程式 程式記憶體暫用最高達到45m左右,基本可以接受了。二個關於除錯的技巧,乙個是檢...