寫時拷貝技術

2021-09-09 05:48:03 字數 777 閱讀 3727

寫時拷貝故名思意:是在寫的時候(即改變字串的時候)才會真正的開闢空間拷貝(深拷貝),如果只是對資料的讀時,只會對資料進行淺拷貝

寫時拷貝技術是通過"引用計數"實現的,在分配空間的時候多分配4個位元組,用來記錄有多少個指標指向塊空間,當有新的指標指向這塊空間時,引用計數加一,當要釋放這塊空間時,引用計數減一(假裝釋放),直到引用計數減為0時才真的釋放掉這塊空間。當有的指標要改變這塊空間的值時,再為這個指標分配自己的空間(注意這時引用計數的變化,舊的空間的引用計數減一,新分配的空間引用計數加一)

class string

string(string& s)

:_str(s._str)

string& operator=(string& s)

return *this; }

~string()

public:

char& operator(size_t index)

getcount()--;

char *tmp = _str;

_str = new char[strlen(tmp) + 1 + 4];

_str += 4;

strcpy(_str, tmp);

getcount() = 1;

return _str[index];

}private:

int& getcount()

void release() }

private:

char *_str;

};

寫時拷貝技術

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

寫時拷貝技術

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

linux寫時拷貝技術

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