關於 copy on write 寫時複製

2021-06-20 04:46:26 字數 703 閱讀 9513

先舉個小例子,在我們學習c++的時候,我不相信老師沒跟你提過什麼是字串string淺拷貝深拷貝的問題,就是:

string a = "i am a programer";

string b = a;

這是所謂的淺拷貝,當然我們不是在討論淺拷貝的問題,我只是讓大家知道b只是字串"i am a programer"的乙個引用,與a有相同的地位,他們都指向同一塊記憶體位址,有興趣可以輸出一下他們的位址,一定是同乙個值。(注意:在vc6.0下如此,但vs2008已經不是這樣了)

當然這是我們只想簡單的引用這個字串的內容。當我們嘗試去修改b的值時,如b = 「i am a worker"; 之後在輸出a和b的位址,這時你會發現,他們的位址不一樣了。這就是使用了寫時拷貝技術。

說白了就是在複製記憶體時,先共享原有記憶體空間,等待不得不複製的時候再去複製。因為複製記憶體是一件十分奢侈的事情。

下面我們從程序的角度來談。

在新的程序建立了之後,這個新建立的程序會暫時共享其父程序的記憶體空間,也就是說子程序(新建立的程序)會複製所有與父程序記憶體空間相關的資訊並使用它。寫時複製(coty-on-write)就是針對記憶體複製的一種技術。上文說到,記憶體複製是一件十分奢侈的事情,它開銷很大,因此,在父程序建立子程序時,子程序直接共享父程序的記憶體空間,而不去複製它。當有必要修改這個共享記憶體空間時,子程序才會將父程序的記憶體資訊複製到自身的記憶體空間中,然後進行修改。在android作業系統中就用到了這項技術。

Copy On Write寫時複製

copy on write解決的問題 早期unix系統建立程序的方式存在缺陷 當發出fork 系統呼叫時,核心原樣複製父程序的整個位址空間並把複製的那乙份分配給子程序。這種行為是非常耗時的,因為它需要 為子程序的頁表分配頁幀 為子程序的頁分配頁幀 初始化子程序的頁表 把父程序的頁複製到子程序相應的頁...

Copy On Write 寫時複製

維基百科 寫入時複製 copy on write 是乙個被使用在程式設計領域的最佳化策略。其基礎的觀念是,如果有多個呼叫者 callers 同時要求相同資源,他們會共同取得相同的指標指向相同的資源,直到某個呼叫者 caller 嘗試修改資源時,系統才會真正複製乙個副本 private copy 給該...

寫時複製Copy On Write

copy on write簡稱cow,不是奶牛,好處就是能保證資料的完整性,掉電的話容易恢復。在執行複製和賦值的時候,不會真正的copy,只有真正對內容進行修改時,才會進行複製,複製完之後再去修改 懶複製 copy on write一定使用了 引用計數 必然有乙個變數類似於refcnt 當第乙個st...