這篇文章主要講解了“Linux中深拷貝與淺拷貝以及寫時拷貝是什么意思”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Linux中深拷貝與淺拷貝以及寫時拷貝是什么意思”吧!

10年積累的網(wǎng)站設計制作、網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設流程,更有正藍免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
假設B復制了A,當修改A時,看B是否會發(fā)生變化。如果B也跟著變了,說明這是淺拷貝;如果B沒變,那就是深拷貝。
1、淺拷貝:將原對象的引用直接賦給新對象,新對象只是原對象的一個引用。
2、深拷貝:創(chuàng)建一個新的對象和數(shù)組,將原對象的各項屬性的“值”(數(shù)組的所有元素)拷貝過來,是“值”而不是“引用”。
淺拷貝只是對指針的拷貝,拷貝后兩個指針指向同一個內(nèi)存空間,深拷貝不但對指針進行拷貝,而且對指針指向的內(nèi)容進行拷貝,經(jīng)深拷貝后的指針是指向兩個不同地址的指針。
3、寫時復制技術(shù):最初產(chǎn)生于Unix系統(tǒng),用于實現(xiàn)一種傻瓜式的進程創(chuàng)建:當發(fā)出fork( )系統(tǒng)調(diào)用時,內(nèi)核原樣復制父進程的整個地址空間并把復制的那一份分配給子進程。這種行為是非常耗時的,因為它需要:
· 為子進程的頁表分配頁面
· 為子進程的頁分配頁面
· 初始化子進程的頁表
· 把父進程的頁復制到子進程相應的頁中
創(chuàng)建一個地址空間的這種方法涉及許多內(nèi)存訪問,消耗許多CPU周期,并且完全破壞了高速緩存中的內(nèi)容。在大多數(shù)情況下,這樣做常常是毫無意義的,因為許多子進程通過裝入一個新的程序開始它們的執(zhí)行,這樣就完全丟棄了所繼承的地址空間。
現(xiàn)在的Unix內(nèi)核(包括Linux),采用一種更為有效的方法稱之為寫時復制(或COW)。這種思想相當簡單:父進程和子進程共享頁面而不是復制頁面。然而,只要頁面被共享,它們就不能被修改。無論父進程和子進程何時試圖寫一個共享的頁面,就產(chǎn)生一個錯誤,這時內(nèi)核就把這個頁復制到一個新的頁面中并標記為可寫。原來的頁面仍然是寫保護的:當其它進程試圖寫入時,內(nèi)核檢查寫進程是否是這個頁面的唯一屬主;如果是,它把這個頁面標記為對這個進程是可寫的。
Linux的fork()使用寫時復制
傳統(tǒng)的fork()系統(tǒng)調(diào)用直接把所有的資源復制給新創(chuàng)建的進程。這種實現(xiàn)過于簡單并且效率低下,因為它拷貝的數(shù)據(jù)或許可以共享。更糟糕的是,如果新進程打算立即執(zhí)行一個新的映像,那么所有的拷貝都將前功盡棄。Linux的fork()使用寫時拷貝(copy-on-write)頁實現(xiàn)。
寫時拷貝是一種可以推遲甚至避免拷貝數(shù)據(jù)的技術(shù)。內(nèi)核此時并不復制整個進程的地址空間,而是讓父子進程共享同一個地址空間。只用在需要寫入的時候才會復制地址空間,從而使各個進行擁有各自的地址空間。也就是說,資源的復制是在需要寫入的時候才會進行,在此之前,只有以只讀方式共享。這種技術(shù)使地址空間上的頁的拷貝被推遲到實際發(fā)生寫入的時候。在頁根本不會被寫入的情況下—例如,fork()后立即執(zhí)行exec(),地址空間就無需被復制了。fork()的實際開銷就是復制父進程的頁表以及給子進程創(chuàng)建一個進程描述符。在一般情況下,進程創(chuàng)建后都為馬上運行一個可執(zhí)行的文件,這種優(yōu)化,可以避免拷貝大量根本就不會被使用的數(shù)據(jù)(地址空間里常常包含數(shù)十兆的數(shù)據(jù))。由于Unix強調(diào)進程快速執(zhí)行的能力,所以這個優(yōu)化是很重要的。
感謝各位的閱讀,以上就是“Linux中深拷貝與淺拷貝以及寫時拷貝是什么意思”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Linux中深拷貝與淺拷貝以及寫時拷貝是什么意思這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
本文名稱:Linux中深拷貝與淺拷貝以及寫時拷貝是什么意思
鏈接地址:http://chinadenli.net/article24/iigije.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、Google、網(wǎng)站排名、全網(wǎng)營銷推廣、面包屑導航、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)