C 寫時拷貝技術

2021-09-13 12:40:09 字數 1060 閱讀 2084

寫時拷貝:就是在寫的時候(修改字串的時)才會進行真正的空間分配,在唯讀的情況下,資料進行淺拷貝。

寫時拷貝技術就是引用計數器的淺拷貝,是通過「引用計數」實現的,在分配空間的時候多分配4個位元組,用來記錄有多少個指標指向這塊空間。

當有新的指標指向這塊空間時,引用計數加1;

當要釋放這塊空間時,僅引用計數減1,直到引用計數減為0(即最後乙個指向這塊記憶體的指標要釋放)才真正釋放掉這塊空間;

當有的指標要改變這塊空間的值時,再為這個指標分配記憶體(注意此時引用計數的變化,舊的空間的引用計數減1,新分配的空間的引用計數加1)。

string類的寫時拷貝

開闢乙個空間,前面4個位元組作為計數器,剩下的為pstr字串的空間

//拷貝建構函式,實現淺拷貝

string& operator=

(const string& rhs)

//賦值運算子的過載

pstr = rhs.pstr;

//賦值(*

(int*)

(pstr-4)

)++;//引用計數加1

}return

*this;

}char

& operator(

int index)

//運算子的過載

return pstr[index];}

~string()

pstr =

null

;//若不是最後乙個指向該空間的指標,不釋放資源,將指標置為null

}private:

char

*pstr;};

intmain()

寫時拷貝技術

cow技術初窺 在linux程式中,fork 會產生乙個和父程序完全相同的子程序,但子程序在此後多會exec系統呼叫,出於效率考慮,linux中引入了 寫時複製 技術,也就是只有程序空間的各段的內容要發生變化時,才會將父程序的內容複製乙份給子程序。那麼子程序的物理空間沒有 怎麼去取指令執行exec系...

寫時拷貝技術

寫時拷貝故名思意 是在寫的時候 即改變字串的時候 才會真正的開闢空間拷貝 深拷貝 如果只是對資料的讀時,只會對資料進行淺拷貝 寫時拷貝技術是通過 引用計數 實現的,在分配空間的時候多分配4個位元組,用來記錄有多少個指標指向塊空間,當有新的指標指向這塊空間時,引用計數加一,當要釋放這塊空間時,引用計數...

寫時拷貝技術

寫時拷貝的主要思想是在複製原來實體的時候,如果複製後的實體不需要進行改變,那麼實際上沒必要進行實體內容的拷貝,只需建立乙個引用指向原來的物理記憶體,直接應用原來的實體內容即可,只有當需要對複製後的實體進行修改的時候才進行內容的拷貝。寫時拷貝技術在很多方面都有應用,典型的有 c 中的寫時拷貝技術 li...