Posts

Showing posts with the label OS

[OS]Strong reference/Weak reference

剛在看 iphone manual 看到 strong pointer / weak pointer 這部分, 應該就是指GC處理時常見字眼: strong reference / weak reference, 這裡複習一下. 每個object都會有個 counter 來紀錄它被reference幾次, 然後GC根據counter決定是否回收記憶體. counter 有三種值: Null, 0, P(>0) 當 counter = P, strong reference 當 counter = null, GC 已回收 當 counter = 0, weak reference 一般疑問是為為什麼需要weak reference?  這篇說得很詳細{ .net記憶體管理之弱參考 } 簡言之就是希望物件在被GC回收前, 給他機會轉為 strong reference, 而不是馬上領便當. 不過除了這考量外, 我在想是否這個機制也適用"在限制的記憶體下, 要求大量的記憶體做計算"時使用? 畢竟常常在處理影像時, 可能有好幾G的影片, 要針對每個Frame取label 卻又懶得自己釋放, 這時候將物件宣告為weakref, 這樣好處多多. 應該是可以吧?! 哈  有機會再試試.

[OS] stack vs heap

2008年10月7日星期二 Stack 及 Heap 基礎概念 作者: 蕭沖 qs.xiao@gmail.com 來源:http://aftcast.blogspot.com/ 這些天因為看到不少網友提到stack overflow的問題,於是想寫一篇簡單但確重要點的雜記。希望大家多多指教,也期待能對一些朋友有所幫助! 1/ windows的flat 模式: 這題目要講起來可以很深,包含許多的組合語言的東西。但在此我只想說一個結果,就是因為windows是使用這樣的一個記憶體管理位址模式,所以使得每個 process都可以有私有的4G的「定址」能力,但因為windows當初要相容MIPS R4000 architecture,所以高位址的2G部份放的是kernel code,而我們的ap只能用低部份的2G,所以正確的來講,我們的程式能夠使用2G的定址能力。 2/虛擬記憶體: 在80386處理器後,cup support 保護模式,paging 模式。我們都知道windows會使用硬碟來充當ram使用,當ram不足的時候。這就是用paging的cpu功能。有了這個功能,os就可以讓每個 process都可以使用2G的data,即使ram只有幾MB。在標題1我們有提到「定址」的這個詞,這只是說cpu的register(暫存器)有能力讓我們定出那麼大的空間。但是可以定出那麼大麼大的空間並不表示你一定先要有那麼大的ram在電腦上。定址是一回事,配置(allocate)又是另一回事,但二者都很重要。比如在dos 80286前的時代,有所謂的640k的限制(那是指定址能力先天不足),所以你就算是買了4MB的ram插在電腦上,還是浪費。回到主題,因為386以後有paging的能力,加上register是32位元,所以就組合出一種相當完美的記憶體管理方法: 每個process都有虛擬的4G記憶體,且可以真的使用到4G,即使你的ram沒有4G,windows會把你的虛擬記憶體資料放到硬碟上。為何說是「虛擬」?就是指你不一定真的有那麼多的真實的ram。比如說你真實的ram有128MB,而你的程式超大,用到512MB,那麼當程式在跑的時候,只會把正需要的code往128MB的ram上放,而把尚不用的放(paging)在硬碟上。 3/ stack: 何謂stack? 是用來放functi...